Języki algorytmiczne niskiego i wysokiego poziomu. Wykład: Języki programowania wysokiego poziomu. Charakterystyka porównawcza Analiza porównawcza języków algorytmicznych wysokiego poziomu
Programowanie obiektowe
Programowanie obiektowe to technika programowania, w której program jest postrzegany jako zestaw dyskretnych obiektów zawierających z kolei zestawy struktur danych i procedur, które wchodzą w interakcje z innymi obiektami.
Pascala, Visual Basic Jawa
Z punktu widzenia zasad programowania języki programowania można podzielić na 3 grupy: proceduralne, funkcjonalne i logiczne
Podstawą wszystkich języków programowania są języki proceduralne, ponieważ w sercu komputera ( procesor) na najniższym poziomie to możliwość wykonywania tylko prymitywnych instrukcji, które wyraźnie mówią procesorowi, co ma robić. Inne rodzaje języków można traktować jako dodatki do języków programowania proceduralnego. Te języki (funkcjonalne i logiczne) zawierają i implementują pewne modele matematyczne, które pozwalają na wydajniejsze programowanie niektórych określonych rodzajów zadań. Ale tłumacze (kompilatory), biblioteki i inne narzędzia tych języków programowania są nadal wdrażane za pomocą proceduralnych języków programowania.
Proceduralne języki programowania
Program składa się z sekwencji imperatywnych poleceń (wyraźnie określających, jakie przekształcenia należy wykonać na danych). Dane są przechowywane jako zmienne.
Języki programowania logiki
Języki programowania tego typu oparte są na logice formalnej i algebrze Boole'a. Program nie zawiera jawnych algorytmów. Podano opis warunków problemu i relacji logicznych, według których system programistyczny buduje drzewo wnioskowania i znajduje rozwiązania problemu.
Funkcjonalne języki programowania
Programowanie funkcyjne opiera się na wykorzystaniu list i funkcji. Zmienne mogą w ogóle nie istnieć.
Przykładem języka proceduralnego jest język programowania Pascal. Prolog to logiczny język programowania, a Lisp to funkcjonalny język programowania.
Programy w logicznych i funkcjonalnych językach programowania mają stosunkowo niską wydajność ze względu na złożoność implementacji.
Języki niskiego poziomu (kod maszynowy i asembler) są w zasadzie proceduralnymi językami programowania. Są to jednak języki na tak niskim poziomie, że określenie „proceduralne” nawet do nich nie pasuje. Raczej lepiej nazwać je imperatywnymi językami programowania.
Większość współczesnych języków programowania proceduralnego rozwija się w kierunku programowania obiektowego.
Programowanie obiektowe
Zmienne i funkcje są pogrupowane w obiekty i klasy. Osiąga to wyższy poziom strukturyzacji i abstrakcji programu. Niektóre obiekty (klasy) mogą być generowane z innych obiektów (klas). Języki zorientowane obiektowo mają pojęcia takie jak dziedziczenie, polimorfizm i późne wiązanie.
Język zajmuje szczególne miejsce Programowanie w Javie. Wynika to z 2 jego doskonałych właściwości. Po pierwsze, implementacja tego języka nie jest związana z konkretną architekturą urządzenia komputerowego (komputer, telefon komórkowy itd.) oraz określony system operacyjny. Program dla język Java jest tłumaczony na kod pośredni, który można wykonać na dowolnej maszynie z uruchomioną wirtualną maszyną Java. Aby przenieść program Java do nowy typ komputera, nie ma potrzeby przepisywania kompilatora dla języka Java i innych narzędzi programistycznych. Ponadto nie ma potrzeby posiadania kodu źródłowego programów Java i ich ponownej kompilacji. Wystarczy przepisać wirtualną maszynę Java pod nową architekturę komputera i uruchamiać na niej aplikacje Java w kodzie pośrednim, który jest taki sam dla dowolnych architektur komputerów.
Po drugie, w Javie można tworzyć nie tylko standardowe programy, ale także specjalne typy aplikacji, tzw. aplety i serwlety, które są naturalnie osadzone w aplikacjach internetowych (stronach HTML i serwerach WWW). Daje to Javie bardzo wysoki stopień autonomii i czyni ją językiem programowania przyszłości. Java to proceduralny, obiektowy język programowania.
Języki programowania równoległego wyróżniają się odrębnie od języków programowania proceduralnego. Języki te mają na celu tworzenie programów, które mogą pełniej wykorzystać potencjał komputerów wieloprocesorowych. Program w języku programowania równoległego opisuje kilka procesów, które są niezależnie wykonywane na własnym procesorze i wymieniają dane we właściwym czasie. Przykład niskopoziomowego języka programowania dla transputerów ( specjalny rodzaj komputery równoległe) to język programowania Ockham. Przykładem języka programowania wysokiego poziomu z obsługą współbieżności jest język programowania Modula-2. Najwyraźniej języki programowania równoległego odchodzą do lamusa, a ich funkcje zrównoleglania programów są realizowane albo na poziomie procesorów (procesory wielordzeniowe), albo te funkcje przejmują systemy operacyjne.
Skryptowe (tagowane)-deklaratywne języki programowania
W Ostatnio Rozpowszechniły się języki tagowane do opisu różnych struktur danych, związane głównie z transmisją informacji przez Internet. Jednym z takich języków jest XML – tagowany język do opisu struktur drzewiastych za pomocą atrybutów, który jest wykorzystywany przy konstruowaniu różnego rodzaju dokumentów. XML stopniowo wypiera HTML, na jego bazie budowane są pliki MS Word i PDF. Aby na przykład przekształcić pliki XML, aby sformatować je zgodnie z nowym szablonem, ponownie opracowano język znaczników XSLT. Struktura pliku XSL (XSLT Transformation File) jest w pełni zgodna ze specyfikacją XML. W swej istocie XSLT jest funkcjonalnym językiem programowania.
W języku Pascal, podobnie jak w większości języków programowania, dostępne są narzędzia, które pozwalają zaprojektować algorytm pomocniczy w postaci podprogramu. Jest to konieczne, gdy podalgorytm powtarza się w programie wielokrotnie lub istnieje możliwość wykorzystania fragmentów wcześniej opracowanych algorytmów. Ponadto podprogramy służą do dzielenia dużych programów na oddzielne części semantyczne zgodnie z zasadą modułowości w programowaniu.
Aby użyć podalgorytmu jako podprogramu, należy nadać mu nazwę i opisać algorytm zgodnie z regułami języka Pascal. W przyszłości, jeśli to konieczne, wywołaj to w programie, zrób wzmiankę o wywołaniu podprogramu właściwe miejsce nazwa odpowiedniego podalgorytmu wraz z listą danych wejściowych i wyjściowych. Taka wzmianka prowadzi do wykonania instrukcji zawartych w podprogramie, pracującej z podanymi danymi. Po wykonaniu podprogramu, praca jest kontynuowana z instrukcją bezpośrednio po wywołaniu podprogramu.
W Pascalu istnieją dwa rodzaje podprogramów - procedury I Funkcje.
Procedury i funkcje są umieszczone w części opisowej programu. Do wymiany informacji między procedurami i funkcjami oraz innymi blokami programu istnieje mechanizm wejście I parametry wyjściowe. Parametry wejściowe to wartości, które są przekazywane z bloku wywołującego do podprogramu standardowego (dane wejściowe dla podprogramu standardowego), a parametry wyjściowe to te, które są przekazywane z podprogramu do bloku wywołującego (wyniki podprogramu standardowego) .
Ten sam podprogram można wywoływać wielokrotnie, wykonując te same czynności z różnymi zestawami danych wejściowych. Parametry używane podczas pisania tekstu podprogramu w sekcji opisu to tzw formalny i te, które są używane podczas wywoływania go - rzeczywisty.
Format opisu procedury to:
procedura nazwa procedury (parametry formalne); sekcja opisu procedury zaczynać wykonywalna część procedury koniec;
Format opisu funkcji:
funkcjonować nazwa funkcji (parametry formalne):typ wyniku; Sekcja opisu funkcji zaczynać wykonywalna część funkcji koniec;
W funkcjach można deklarować własne zmienne, zmienne te nazywane są lokalny, czyli można ich używać tylko w funkcji, w której zostały zadeklarowane.
Gdy funkcja kończy działanie, są one niszczone.
Jeśli zadeklarujesz zmienną poza jakąkolwiek funkcją (takie zmienne są nazywane światowy), to może być używany we wszystkich funkcjach bez deklaracji.
Struktury danych definiują klasyfikację danych i relacje między nimi. Struktury mogą być proste (elementarne) lub złożone (złożone). Istnieją następujące struktury: stała, zmienna, tablica, rekord i tabela. Stałą i zmienną można uznać za dane elementarne, pojedyncze, niepodzielne elementy bardziej złożonych systemów organizacji danych.
Stały- jest to liczba, tekst lub wartość logiczna, która nie zmienia się w procesie implementacji algorytmu rozwiązującego problem na komputerze.
Zmienny- Jest to jednostka organizacji danych, której w procesie przetwarzania informacji można przypisać różne wartości. Zmienna ma nazwę - identyfikator i typ: liczbowy, symboliczny (litera, ciąg znaków), logiczny. Zmiennym mogą towarzyszyć słowa określające ich typ.
tablica - jest to zbiór elementów tego samego typu połączonych jedną nazwą (identyfikatorem tablicy). Główne parametry tablic to ich typ (numeryczna, symboliczna, logiczna), wymiar (jednowymiarowy, dwuwymiarowy itp.) oraz rozmiar (liczba elementów tablicy w każdym wymiarze).
rekursja- jest to taka organizacja algorytmu, w której procedura odnosi się do samej siebie. Sama procedura nazywa się rekurencyjną.
Klasyfikacja i charakterystyka oprogramowania
Program steruje pracą komputera. Wszystkie programy komputerowe, które są przechowywane w jego zewnętrznej pamięci oprogramowanie(PRZEZ).
Oprogramowanie | |||||
oprogramowanie systemowe | oprogramowanie | ||||
system operacyjny | Narzędzia | Systemy programowania | ogólny cel | Programy specjalistyczne | Profesjonalne programy |
załadowany do Baran i organizuje wykonywanie innych programów, współdziała z komputerem | program systemowy– optymalizuje przechowywanie na dysku, chroni przed wirusami itp. | przeznaczony do tworzenia nowych programów | tabele tekstowe, grafika, muzyka, zarządzanie bazami danych | systemy eksperckie, hipertekst, multimedia | AISU - automatyzacja System informacyjny zarządzanie, system CAD projektowanie wspomagane komputerowo, Systemy edukacyjne, Wyszukiwarki geoinformacyjne |
Windows, UNIX, Linux, Hummingbird itp | BASIC, Pascal, Delphi, | Notatnik, Word, Excel, Paint, Sound Forge, Access | „1C-enterprise”, „Kompas” - do rysowania, |
adnotacja. Znaczenie badania tłumaczy się znaczeniem uzyskania wysokiej jakości prognoz głównych wskaźników finansowych w warunkach obecne trendy, a także udane doświadczenia z wykorzystaniem sieci neuronowych w zadaniach prognozowania, co można zrobić, wybierając odpowiedni język programowania. To aktualizuje cel tego artykułu - analizę porównawczą języków programowania.
Słowa kluczowe: język programowania, środowisko programistyczne, narzędzia.
Istniejące języki programowania są przeznaczone do rozwiązywania dość wąskiego zakresu zadań. Język nie może być panaceum dobre cechy dla niektórych zadań (lub osób) może być złe dla innych.
Należy odróżnić język programowania (Basic, Pascal) od jego implementacji, która zwykle jest prezentowana jako część środowiska programistycznego (Quick Basic, Virtual Pascal) – zestawu narzędzi do edycji tekstów źródłowych, generowania kodu wykonywalnego, debugowania, zarządzania projektami itp. Składnia i semantyka języka programowania jest ustalona w standardzie językowym. Każde środowisko programistyczne dostarcza własnego interpretera lub kompilatora z tego języka, co często pozwala na stosowanie konstrukcji, które nie są utrwalone w standardzie.
Istotny jest cel, do realizacji którego wybrany jest język – czy to do nauczania programowania, czy też do rozwiązania konkretnego problemu aplikacyjnego. W pierwszym przypadku język powinien być łatwy do zrozumienia, surowy iw miarę możliwości pozbawiony „pułapek”. W drugim - choć złożonym, ale skutecznym i wyrazistym narzędziem dla profesjonalisty.
Oczywiście w praktyce uczenia się nie da się oddzielić od realnych zadań. Tak zwane zadania wychowawcze najczęściej cierpią z powodu nadmiernej abstrakcji i nieprzydatności w życiu. Opanowanie języka (lub środowiska programistycznego) samo w sobie nie może być uważane za zadanie, a dokładniej, jest to podejście bardzo nieproduktywne. Skuteczna nauka języka jest możliwa tylko na prawdziwe przykłady. Z drugiej strony zaprogramowanie rozwiązania pełnowartościowego problemu „z życia” na początkowym etapie nauki języka okazuje się ciężarem nie do uniesienia, który może odstraszyć, a nie zainteresować.
Podczas rozwiązywania konkretnego zastosowanego problemu w większości przypadków język programowania i środowisko nie są wybierane, ale są ustalane z zewnątrz - przez klienta, kierownika itp. W tym samym rzadkim przypadku, gdy wybór jest możliwy, moim zdaniem wynika on z następujących warunków (w kolejności ważności):
a) charakter samego zadania i wymagania techniczne;
b) opracowane narzędzia i biblioteki dostępne dla tego środowiska;
c) narzędzia dostępne w środowisku językowym i programistycznym.
Często przy takim wyborze robią dokładnie odwrotnie: najpierw decydują, że będą programować na obiektach, potem, że będzie używana konkretna biblioteka, a potem dostosowują do tego wymagania techniczne, tłumacząc to tym, że klient „nie wie, czego chce”.
Możliwość zastosowania języka do określonego zadania zależy od tego, na jakim zbiorze pojęć operuje profesjonalista, w ramach jakich pojęć (paradygmatów) pozwala on pracować, jakie standardowe i wspólne biblioteki użytkownika są dostępne itp.
Zgodnie ze zbiorem pojęć języki dzielą się na języki wysokiego i niskiego poziomu. Te pierwsze zapewniają wysoki poziom abstrakcji od sprzętu, drugie niski poziom, blisko maszyny.
Z punktu widzenia tego, czy w zbiorze pojęć znajdują się obiekty specjalne, specyficzne dla domeny, języki dzielą się na uniwersalny(proceduralne) i wyspecjalizowane. Te ostatnie obejmują Prolog, Lisp. Języki uniwersalne pozwalają zaimplementować dowolny algorytm przy użyciu standardowego zestawu konstrukcji. Dzięki temu kod w takim języku można dość łatwo przenieść z jednego języka proceduralnego na inny za pomocą konserwatywnych zmian.
Oto główne koncepcje wprowadzone do niektórych powszechnie używanych języków i związane z nimi koncepcje: pisanie na klawiaturze i struktury danych. Każdy język charakteryzuje się zestawem podstawowych typów, możliwością uzupełnienia tego zestawu za pomocą szeregu konstruktorów: tablica, rekord (struktura), suma. Niektóre języki mają typ ogólny (Variant w Delphi i Visual Basic), który może być dowolnie używany jako dowolny z typów podstawowych. Stopień kontroli typu może być bardzo różny - od całkowitego braku do wyjątkowo sztywnego. Ważne jest posiadanie (być może w postaci biblioteki) struktur danych o zmiennej długości, takich jak tablice dynamiczne.
Różnice w językach sprowadzają się do sposobu definiowania procedur i funkcji, opcji przekazywania parametrów, możliwości definiowania procedur rekurencyjnych oraz obecności proceduralnego typu danych.
Obecność i szeroka klasyfikacja typów pamięci umożliwia efektywne zarządzanie jej dystrybucją, ale wprowadza również złożoność, która wymaga od programisty ostrożniejszego podejścia. Zwykle alokuj (widmo maksymalne): rejestry, zmienne globalne, lokalne i dynamiczne.
Dostępność środków do logicznego łączenia grupy procedur, funkcji, zmiennych pozwala pracować z dużymi projektami, upraszczając ich strukturę. Ważną właściwością jest możliwość opisu procedur inicjowania i kończenia modułu.
Połączenie struktur i metod ich przetwarzania (enkapsulacji) stwarza znaczną wygodę w programowaniu. Możliwość dziedziczenia pozwala na wprowadzenie do systemu zestawu struktur. Automatycznie nazywane konstruktorami i destruktorami ułatwiają śledzenie relacji. Wszystko to stanowi poręczne narzędzie opisywać koncepcje i działania programu użytkowego.
Niezależność sprzętowa, zaimplementowana z semantyką niezależną od maszyny i wprowadzeniem do języka szeregu specyficznych pojęć, takich jak typ podstawowy o niestałym rozmiarze (int w C).
Z punktu widzenia efektywności ważny jest sposób realizacji programu – spójna interpretacja kod źródłowy (interpretator) lub bezpośrednie wykonanie gotowy kod (kompilator). Korzystanie z tłumacza jest wskazane tylko w przypadku, gdy szybkość tłumaczenia nie wpływa znacząco na wydajność programu. Oprócz interpretacji i kompilacji możliwe są opcje pośrednie podczas generowania pseudo kod, który różni się od tekstu oryginalnego dużą szybkością interpretacji lub innymi przydatnymi właściwościami (na przykład możliwością wykonywania na maszynach o różnych architekturach - jak Java).
Rozważmy popularne języki i środowiska oprogramowania z punktu widzenia możliwości adaptacji do różnych klas zadań.
Urodzony w latach 60. w Ameryce BASIC został pomyślany jako prosty język do szybkiej nauki. BASIC stał się de facto standardem dla mikrokomputerów właśnie ze względu na swoją prostotę zarówno w opanowaniu, jak iw implementacji. Jednak aby osiągnąć tę jakość podjęto szereg decyzji (brak maszynopisania, numeracji linii i niestrukturalnego GOTO itp.), które negatywnie wpływają na styl studentów programowania. Poza tym wada środki wyrazu doprowadziło do powstania ogromnej liczby dialektów języka, które nie są ze sobą kompatybilne. Nowoczesne, wyspecjalizowane wersje BASIC-a (takie jak Visual Basic), pomimo nabytej „strukturalności”, mają wszystkie te same wady, przede wszystkim – niedbałość w stosunku do typów i opisów. Nadaje się do wykorzystania na początkowym etapie szkolenia, jako narzędzie do automatyzacji (w przypadkach, gdy jest wbudowane w odpowiednie systemy) lub jako narzędzie do szybkiego tworzenia aplikacji.
Opracowany przez słynnego teoretyka N. Wirtha w oparciu o idee Algola-68, Pascal był przeznaczony przede wszystkim do nauczania programowania. Zbudowany na zasadzie „niezbędny i wystarczający”, posiada silną kontrolę typów, konstrukcje do opisu dowolnych struktur danych, mały, ale wystarczający zbiór operatorów programowania strukturalnego. Niestety, Odwrotna strona Prostota i rygor to nieporęczność opisów konstrukcji językowych. Najsłynniejsza implementacja – Turbo/Borland Pascal – pomimo różnic w stosunku do standardu Pascal, jest środowiskiem i zestawem bibliotek, które uczyniły język edukacyjny układ przemysłowy do tworzenia programów w środowisku MS −DOS.
Najjaśniejszym przedstawicielem języków niskiego poziomu jest Assembler, którego zbiór koncepcji opiera się na implementacji sprzętowej. Jest to narzędzie do automatyzacji programowania bezpośrednio w kodach procesora. Rozkazy maszynowe opisane są w postaci operacji mnemonicznych, co pozwala na uzyskanie odpowiednio dużej modyfikowalności kodu. Ponieważ zestaw instrukcji na różnych procesorach jest inny, nie ma potrzeby mówić o kompatybilności. Używanie asemblera jest przydatne w przypadkach, gdy potrzebujesz bezpośredniej interakcji ze sprzętem lub uzyskać większą wydajność dla jakiejś części programu dzięki większej kontroli nad generowaniem kodu.
Po długich zmaganiach na froncie Windows, Borland wkroczył na rynek systemów dla przedsiębiorstw. Delphi nie jest następcą Borland Pascal/Borland C, jego niszą jest tzw. szybkie tworzenie aplikacji (Rapid Application Developing, RAD). Takie narzędzia pozwalają w możliwie najkrótszym czasie tworzyć program pracy z gotowych komponentów, nie marnując przy tym wiele wysiłku na drobiazgi. Szczególne miejsce w tego typu systemach zajmuje możliwość pracy z bazami danych.
Jako doskonały przykład specjalizacji, język Java narodził się w odpowiedzi na zapotrzebowanie na język idealnie przenośny, który mógłby wydajnie uruchamiać programy po stronie klienta WWW. Ze względu na charakter środowiska Java może być dobry wybór dla systemu zbudowanego w technologii Internet/Intranet.
Sercem języka C są wymagania programista systemowy: pełny i sprawny dostęp do wszystkich zasobów komputerowych, narzędzi programistycznych wysoki poziom, przenośność programów między różnymi platformami i systemami operacyjnymi. C++, zachowując kompatybilność z C, przynosi możliwości programowania obiektowego poprzez wyrażenie idei klasy (obiektu) jako typu zdefiniowanego przez użytkownika. Dzięki tym cechom C/C++ zajął pozycję uniwersalnego języka do każdego zadania. Ale jego użycie może stać się nieefektywne, gdy wymagane jest uzyskanie gotowego do użycia wyniku w jak najkrótszym czasie lub gdy samo podejście proceduralne staje się nieopłacalne.
Realizacja projektu budowy modelu sieci neuronowej do predykcji szeregów czasowych danych finansowych w oparciu o perceptron wielowarstwowy wytrenowany z wykorzystaniem algorytmu wstecznej propagacji (a także sformalizowania kompletny schemat zastosowanie tego modelu do analizy i prognozowania szeregów czasowych na przykładzie notowań akcji rosyjskich emitentów na giełdzie MICEX), wybrano środowisko programistyczne C++ Builder 2010, gdyż łączy w sobie funkcjonalność i dobra prędkość pracę programów wykonanych w C++, a także pozwalają szybko stworzyć działający program z gotowych komponentów, nie marnując przy tym wiele wysiłku na drobiazgi.
Zmienia się sprzęt i systemy operacyjne. Nowe problemy pojawiają się w różnych obszarach tematycznych. Przeszłość minęła i pojawiają się nowe języki. Ale ludzie pozostają – ci, którzy piszą i ci, dla których piszą nowe programy i których wymagania jakościowe pozostają takie same niezależnie od tych zmian.
- Jarrod Holingworth, Bob Swart, Mark Cashman, Paul Gustavson Podręcznik programisty Borland C++ Builder 6 = Podręcznik programisty Borland C++ Builder 6. - M .: "Williams", 2004. - S. 976.
- Vik Kurilovich Visual Basic. - Wydawnictwo "Solon-Press", 2006, -S. 384.
- Andreeva TA Programowanie w Pascalu. − Wydawca: Uniwersytet Internetowy Technologie informacyjne, Binom. Laboratorium wiedzy, 2006 - s. 240.
- Pilshchikov V. N. Asembler. Programowanie w asemblerze IBM. - Wydawca PC: Dialog-MEPhI, 2005 - S. 288.
- Zhelonkin A. Podstawy programowania w zintegrowanym środowisku DELPHI. − Wydawca: Binom. Laboratorium wiedzy, 2004 - s. 240.
- Joshua Bloch Jawa. Efektywne programowanie Efektywna Java. Przewodnik po języku programowania — seria: Java Wydawca: Lori, 2002 — str. 224.
- Lafore R. Programowanie obiektowe w C++ Programowanie obiektowe w C++ - Wydawca: Piter, 2011
Klasyfikacja języków programowania.
Istnieją różne klasyfikacje języków programowania.
Według najczęściej spotykanej klasyfikacji, wszystkie języki programowania, zgodnie z terminami, w jakich należy opisać zadanie, dzielą się na języki niski i wysoki poziom.
Jeśli język jest zbliżony do naturalnego języka programowania, wówczas nazywany jest językiem wysokiego poziomu; jeśli jest bliższy do poleceń maszynowych, nazywany jest językiem niskiego poziomu.
Do grupy językowej niski poziom obejmuje języki maszynowe i symboliczne języki kodowania: Autocode, Assembler. Operatorami tego języka są te same instrukcje maszynowe, ale zapisane w kodach mnemonicznych, a nie konkretnych adresach, ale nazwy symboliczne są używane jako operandy. Wszystkie języki niskiego poziomu koncentrują się na określonym typie komputera, to znaczy są zależne od maszyny.
Języki zorientowane maszynowo- są to języki, zestawy operatorów i środki wizualne, które w znacznym stopniu zależą od cech komputera (język wewnętrzny, struktura pamięci itp.).
Do języków programowania wysoki poziom wspominać Fortran(translator formuł - został opracowany w połowie lat 50. przez programistów IBM i jest używany głównie w programach wykonujących obliczenia przyrodnicze i matematyczne), ALGOL, kobol(język handlowy – używany głównie do programowania zadań ekonomicznych), Pascala, PODSTAWOWY(został opracowany przez profesorów Darmouth College, Johna Kemeny'ego i Thomasa Kurtza.), Xi(Dennis Ritch - 1972) Prolog(język oparty jest na aparacie logiki matematycznej) itp.
Te języki niezależny od maszyny, ponieważ skupiają się nie na systemie poleceń konkretnego komputera, ale na systemie operandów charakterystycznych dla pisania pewnej klasy algorytmów. Jednak programy napisane w językach wysokiego poziomu zajmują więcej pamięci i działają wolniej niż programy napisane w językach maszynowych.
Komputer nie rozumie programu napisanego w języku programowania wysokiego poziomu, ponieważ ma do dyspozycji tylko język maszynowy. Dlatego, aby przetłumaczyć program z języka programowania na język kodu maszynowego, używa się specjalne programy- tłumacze.
Istnieją trzy rodzaje tłumaczy: tłumacze(jest to translator, który wykonuje przetwarzanie operator po operatorze i wykonanie kodu źródłowego programu), kompilatory(konwertuje cały program na moduł języka maszynowego, po czym program jest zapisywany w pamięci komputera i dopiero potem wykonywany) oraz asemblery(przetłumaczyć program napisany w asemblerze na program w języku maszynowym).
Języki programowania można również podzielić na generacje:
– języki pierwszej generacji: zorientowane na maszynę z ręcznym zarządzaniem pamięcią na komputerach pierwszej generacji.
– języki drugiej generacji: z mnemoniczną reprezentacją poleceń, tzw. autokodami.
– języki trzeciej generacji: ogólnego przeznaczenia, używany do tworzenia programów aplikacyjnych dowolnego typu. Na przykład BASIC, Cobol, C i Pascal.
– języki czwartej generacji: zaawansowany, przeznaczony do tworzenia specjalnych programów aplikacyjnych do zarządzania bazami danych.
– języki programowania piątej generacji Słowa kluczowe: języki deklaratywne, obiektowe i wizualne. Na przykład Prolog, LISP (wykorzystywany do budowy programów z wykorzystaniem metod sztucznej inteligencji), C++, Visual Basic, Delphi.
Języki programowania można również podzielić na proceduralne i nieproceduralne.
W językach proceduralnych program jednoznacznie opisuje czynności do wykonania, a wynik określa jedynie sposób jego uzyskania za pomocą jakiejś procedury, czyli określonej sekwencji działań.
Wśród języków proceduralnych są z kolei języki strukturalne i operacyjne. W językach strukturalnych całe struktury algorytmiczne są pisane jednym operatorem: gałęzie, pętle itp. W językach operacyjnych stosuje się do tego kilka operacji. Rozpowszechnione są następujące języki strukturalne: Pascal, C, Ada, PL/1. Na salach operacyjnych znane są Fortran, BASIC, Fokal.
Nieproceduralne (deklaratywne) programowanie pojawiło się na początku lat 70. XX wieku, w tym programowanie nieproceduralne języki funkcjonalne i logiczne.
W językach funkcjonalnych program opisuje obliczenie pewnej funkcji. Zwykle ta funkcja jest podawana jako złożenie innych, prostszych, które z kolei dzielą się na jeszcze więcej proste zadania itp. Jednym z głównych elementów języków funkcjonalnych jest rekurencja. W klasycznych językach funkcjonalnych nie ma operatora przypisania ani pętli.
W językach logicznych program w ogóle nie opisuje działań. Definiuje dane i relacje między nimi. Następnie systemowi można zadawać pytania. Maszyna przegląda znane i podane dane w programie i znajduje odpowiedź na pytanie. Kolejność iteracji nie jest opisana w programie, ale jest domyślnie ustalana przez sam język. Prolog jest uważany za klasyczny język programowania w logice. Program Prolog zawiera zestaw instrukcji-predykatów, które tworzą zorientowaną na problemy bazę danych oraz reguły, które wyglądają jak warunki.
Można wyróżnić jeszcze jedną klasę języków programowania - języki obiektowe wysokiego poziomu. Takie języki nie opisują szczegółowej sekwencji działań w celu rozwiązania problemu, chociaż zawierają elementy programowania proceduralnego. Języki obiektowe, dzięki bogatemu interfejsowi użytkownika, oferują osobie rozwiązanie problemu w dogodnej dla niej formie.
Pierwszy zorientowany obiektowo język programowania, Simula, został stworzony w latach 60. przez Nygaarda i Dahla.
Jawa Internetowy język programowania, który umożliwia tworzenie bezpiecznych, przenośnych, niezawodnych, zorientowanych obiektowo programów interaktywnych. Język Java jest ściśle powiązany z Internetem, ponieważ pierwszym poważnym programem napisanym w tym języku była przeglądarka World Wide Web.
Ostatnio mówiąc o programowaniu w internecie często mają na myśli tworzenie publikacji z wykorzystaniem języka znaczników. dokumenty hipertekstowe HTML. Wykorzystanie specjalnych narzędzi (edytorów HTML) pozwala nie tylko na tworzenie osobnych dynamicznie zmieniających się interaktywnych dokumentów HTML z wykorzystaniem danych multimedialnych, ale także na edycję całych serwisów.
Język programowania jest językiem sztucznym. Różni się od języka naturalnego ograniczoną liczbą słów, których znaczenie jest jasne dla tłumacza, oraz bardzo ścisłymi regułami pisania poleceń czy operatorów. Połączenie tych wymagań jest składnia języka. A znaczenie każdego polecenia i innych konstrukcji językowych jest jego semantyka. Naruszenie formularza zapisu programu prowadzi do wystawienia przez tłumacza komunikatu o błąd składni, ale poprawnie napisane, ale nie odpowiadające algorytmowi, do którego prowadzi użycie poleceń błędy semantyczne.(do log. osh) Nazywa się proces wyszukiwania błędów w programie testowanie, a proces eliminacji jest debugowanie.
tłumacz.
Kompilator Interpretować. Natychmiast pobierają operatory z tekstu programu, analizują jego strukturę, a następnie natychmiast go wykonują. Dopiero po pomyślnym wykonaniu bieżącej instrukcji interpreter przejdzie do następnej. Co więcej, jeśli ta sama wypowiedź powtarza się wiele razy, tłumacz za każdym razem analizuje ją tak, jak w pierwszej. Z pomocą tłumacza można w każdej chwili zatrzymać program, zbadać zawartość pamięci, zorganizować dialog z użytkownikiem, czyli interpreter jest przydatny jako narzędzie do nauki programowania. W rzeczywistych systemach programistycznych technologie kompilacji i interpretacji są łączone. Np.: W trakcie debugowania programu możesz krok po kroku uzyskać kod niebędący obiektem do debugowania.
Istnieją 3 etapy:
kompilacja - utworzenie pliku obiektowego *.obj
Łączenie z USES
Język programowania określony typ procesora język programowania niskiego poziomu Oznacza to, że operatorzy języka koncentrują się na określonych instrukcjach procesora (Assembler jest najniższym poziomem, reprezentuje każdą instrukcję kodu maszynowego za pomocą symbolu mnemonicznego). Jednoznaczne przekształcenie jednej instrukcji maszynowej w jedną instrukcję asemblerową nazywa się transliteracją. W takich językach pisze się aplikacje systemowe, sterowniki oraz moduły dokujące z niestandardowym wyposażeniem.
Języki programowania wysokiego poziomu są znacznie bliższe i bardziej zrozumiałe dla ludzi niż dla komputerów. Specyfika architektur nie jest brana pod uwagę, => programy w tych językach można przenosić na inne platformy, na których są tłumacze.
Pokolenia:
I 50x 1 język asemblera, wykonany zgodnie z zasadą instrukcji 1 linia 1. (niesymboliczny)
II do lat 50. Asembler symboliczny, wprowadzono pojęcie zmiennej (daje adres względny), można powiedzieć pierwszy pełnoprawny język programowania.
III lata 60. Języki wysokiego poziomu Fortran, Basic, Pascal itp. odeszły. Produktywność programisty wzrosła dramatycznie.
VI wcześnie. Lata 70. Okres języków przeznaczonych do realizacji dużych projektów, w celu zwiększenia szybkości niezawodności trwa. -Języki zorientowane na problem, języki skupione na dużych zadaniach specjalnych (wąski obszar specjalny). Wbudowane są w nie potężne operatory, umożliwiające pisanie złożonej funkcjonalności (DBMS) w jednym wierszu.
V od lat 90. języki wizualne były tworzone jako system do automatycznego tworzenia programów aplikacyjnych przy użyciu wizualnych narzędzi programistycznych. Idealnie, pomoce wizualne, z których mogą korzystać osoby niebędące programistami. Dwa aspekty 1 - wykorzystanie elementów wizualnych, 2 - kodowanie.
Układ programowania:
Zawiera wszystko, czego potrzebujesz do tworzenia i debugowania programów
Edytor tekstu
kompilator (tłumaczenie z wysokiego kodu na kod maszynowy) wspólne kompatybilne rozszerzenie *.obj
edytor linków - linker (Link).
Kod źródłowy programu składa się z kilku modułów, z których każdy jest skompilowany w osobne pliki, te pliki obiektowe są połączone w jedną całość, dodatkowo dodawane są kody maszynowe podprogramów implementujących standardowe funkcje, które są zawarte w standardzie biblioteki dostarczane z kompilatorem, podprogram, który ma te kody (system.tpu - w Pascalu). Linker (linker) zbiera program razem, w tym wszystkie zaprogramowane programy i standardowe podprogramy, oblicza rzeczywiste adresy.
Wszystkie skojarzenia są wykonywane w wymaganym formacie (format jest ustalany przez typ systemu operacyjnego), wynikiem jest plik z rozszerzeniem *.exe, umieszczany jest w rzeczywistej pamięci RAM, dopiero wtedy można uruchomić plik wykonywalny. Efektem pracy linkera jest moduł ładujący z rozszerzeniami *.exe, *.com.
Dostępność bibliotek funkcji standardowych.
System programowania musi posiadać debugger - wykonywanie programu krok po kroku, obserwując jak zmienia się wartość zmiennej.
Poziomy języka programowania:
Języki są bliskie naszej konwersacji, wymagane jest dokowanie z jakimś niestandardowym sprzętem. Aby program zajmował mało pamięci i czasu działania, bądź szybszy, a następnie zwracają się do asemblera.
Fortran jest językiem czysto inżynierskim. Programy są bardzo zwarte. Język używany wyłącznie zawodowo
CABOL – językiem księgowym jest angielski. rosyjski Wersje
Algol (68) – miał zastąpić Fotran, ale ze względu na złożoność struktury dystrybucji nie otrzymał
Pascal - przejął idee Algola, zaostrzył wymagania dotyczące struktury programu
C - pierwotnie opracowany jako masa i planowany do zastąpienia asm, posiada dodatkowe udogodnienia
C++ - zorientowane obiektowo rozszerzenie języka C
Java - stworzona w oparciu o C++. Próbowano wykluczyć funkcje niskiego poziomu z C++. Funkcja - kompilacja nie do kodu maszynowego, ale do niezależnego od platformy kodu bajtowego.
Języki programowania dla Internetu - html, perl, vrml
Skórki wizualne:
Basic - 1 miejsce pod względem popularności na świecie został stworzony do nauki.Microsoft Visual Basic
Pascal - Delphi - popularny do pracy z bazą danych Borland Delphi
HTML, perl, php - dla sieci
C++ Borland C++ Builder
Java Symantec Cafe (telefony komórkowe, sprzęt AGD)
2. Tłumacze: cel, klasyfikacja, przykłady. Etapy przekazywania programów na komputerze
Tłumacz: kompilator i interpreter. Aby uzyskać działający program, tekst musi zostać przetłumaczony na kod maszynowy; w tym celu zwracają się do programu tłumaczącego, który nazywa się tłumacz.
Kompilator— Pobiera kod wynikowy. Są to programy przetwarzające cały tekst programu, tj. źródło. Najpierw skanuje tekst w poszukiwaniu błędów składniowych, następnie przeprowadza analizę semantyczną, po czym tekst jest automatycznie tłumaczony lub tłumaczony na język maszynowy. Często podczas generowania kodu maszynowego optymalizacja odbywa się za pomocą zestawu metod zwiększających szybkość działania programu. W rezultacie cały program, zwany kodem obiektowym, jest zwarty i wydajny oraz może być przenoszony na inne komputery z procesorem obsługującym odpowiedni kod maszynowy. Interpretować. Natychmiast biorą wypowiedzi z tekstu programu, analizują jego strukturę, a następnie natychmiast go wykonują. Dopiero po pomyślnym wykonaniu bieżącej instrukcji interpreter przejdzie do następnej. Co więcej, jeśli ta sama wypowiedź powtarza się wiele razy, tłumacz za każdym razem analizuje ją tak, jak w pierwszej. Z pomocą tłumacza można w każdej chwili zatrzymać program, zbadać zawartość pamięci, zorganizować dialog z użytkownikiem, czyli interpreter jest przydatny jako narzędzie do nauki programowania. W rzeczywistych systemach programistycznych technologie kompilacji i interpretacji są łączone. Np .: w procesie debugowania programu można to zrobić etapami. aby uzyskać kod niebędący obiektem do debugowania.
Istnieją 3 etapy:
Kod źródłowy programu Pascal musi być zapisany w pliku z rozszerzeniem .pas. Plik ten jest przetwarzany przez kompilator, a wynikiem jest kod obiektowy, automatycznie zapisywany w pliku z rozszerzeniem .tpu (jednostka turbo Pascala), program jest przetwarzany przez linker – uzyskuje się ładowany moduł, automatycznie zapisywany w pliku z rozszerzeniem exe. Następnie program przechodzi do wykonania (w trakcie można połączyć dane początkowe), następnie otrzymujemy wyniki.
kompilacja - utworzenie pliku obiektowego *.obj, *.tpu
linkowanie - tworzy plik wykonywalny *.exe
wykonanie - wynik utworzony przez etapy
Po kompilacji w Delphi otrzymujemy rozszerzenie *.dcu - statyczną bibliotekę
Łączenie z USES
Język programowania- jest to system notacji służący do dokładnego opisywania programów lub algorytmów dla komputera. Języki programowania to języki sztuczne. Różnią się od języków naturalnych ograniczoną liczbą „słów” i bardzo ścisłymi zasadami pisania poleceń (operatorów). Dlatego zastosowane zgodnie z przeznaczeniem nie pozwalają na swobodną interpretację wyrażeń charakterystycznych dla języka naturalnego.
podstawowy. Został opracowany w 1963 roku przez profesorów z Dartmouth College, Thomasa Kurtza i Johna Kemeny'ego. Język przeznaczony był do nauczania programowania i rozpowszechnił się w postaci różnych dialektów, przede wszystkim jako język komputerów domowych. Następujące osiem zostało użytych przy projektowaniu języka zasady: 1. Być łatwym w użyciu dla początkujących 2. Być językiem programowania ogólnego przeznaczenia 3. Zapewniać rozszerzalność doświadczonym programistom 4. Być interaktywnym 5. Dostarczać jasne komunikaty o błędach 6. Działać szybko na małych programach 7. Nie wymaga zrozumienia operacji sprzęt komputerowy 8. Chroń użytkownika przed system operacyjny. Język został oparty częściowo na Fortranie II, a częściowo na Algolu-60, z dodatkami mającymi na celu dostosowanie go do podziału czasu, a później przetwarzania tekstu i arytmetyki macierzowej. Składnia języka jest podobna do Fortranu, a wiele elementów jest z niego wyraźnymi zapożyczeniami. Język został stworzony do nauki, więc jego projekty są tak proste, jak to tylko możliwe. Podobnie jak w innych językach programowania, słowa kluczowe pochodzi z po angielsku. Istnieją dwa podstawowe typy danych: ciągi znaków i liczby. Deklarowanie zmiennych nie wymaga specjalnej sekcji (w przeciwieństwie np. do Pascala). Deklaracja zmiennej jest jej pierwszym użyciem.
C ostry — C#(wymawiane si ostry) to zorientowany obiektowo język programowania. Został opracowany w latach 1998-2001 przez grupę inżynierów kierowanych przez Andersa Hejlsberga z firmy Microsoft jako język programowania aplikacji dla platformy Microsoft.NET Framework. C# należy do rodziny języków o składni podobnej do C, której składnia jest najbliższa C++ i Javie. Język jest typowany statycznie, obsługuje polimorfizm, przeciążanie operatorów (w tym jawne i niejawne operatory rzutowania typów), delegaty, atrybuty, zdarzenia, właściwości, typy i metody generyczne, iteratory, funkcje anonimowe z obsługą domknięć, LINQ, wyjątki, komentarze w formacie XML. Zaadoptował wiele od swoich poprzedników - C++, Java, Delphi. C#, w oparciu o praktykę ich używania, wyklucza niektóre modele, które okazały się problematyczne w rozwoju systemy oprogramowania na przykład język C# nie obsługuje dziedziczenia wielu klas (w przeciwieństwie do języka C++).
język programowania C++ - skompilowany język programowania ogólnego przeznaczenia o typie statycznym. Obsługuje różne paradygmaty programowania, ale w porównaniu ze swoim poprzednikiem, językiem C, najwięcej uwagi poświęca się wspieraniu programowania obiektowego i generycznego. Nazwa „C++" pochodzi od języka C, w którym operator jednoargumentowy ++ oznacza przyrost zmiennej. W latach 90. XX wieku język ten stał się jednym z najczęściej używanych języków programowania ogólnego przeznaczenia. Tworząc C++ starali się zachować kompatybilność z językiem C. Większość programów C będzie działać poprawnie również z kompilatorem C++. C++ ma składnię opartą na składni C.
Zalety C++ to niezwykle potężny język, który zapewnia narzędzia do tworzenia wydajnych programów do niemal każdego celu, od narzędzi i sterowników niskiego poziomu po złożone systemy oprogramowania do najróżniejszych celów. W szczególności: Wysoka kompatybilność z językiem C, pozwalająca na użycie całego istniejącego kodu C (kod C może być skompilowany przy minimalnych przeróbkach przez kompilator C++; biblioteki napisane w C można zwykle wywołać bezpośrednio z C++ bez żadnych dodatkowych kosztów, w tym na poziomie wywołania zwrotnego, umożliwiając bibliotekom napisanym w C wywołanie kodu napisanego w C++). Obsługiwane są różne style i technologie programowania, w tym tradycyjne programowanie dyrektywne, OOP, programowanie ogólne, metaprogramowanie (szablony, makra). Możliwa jest praca na niskim poziomie z pamięcią, adresami, portami. Możliwość tworzenia ogólnych kontenerów i algorytmów dla różne rodzaje danych, ich specjalizacji oraz obliczeń na etapie kompilacji z wykorzystaniem szablonów. Międzyplatformowe. Kompilatory są dostępne dla wielu platform, programy są tworzone w C++ dla szerokiej gamy platform i systemów. Efektywność. Język został zaprojektowany tak, aby zapewnić programiście maksymalną kontrolę nad wszystkimi aspektami struktury i wykonywania programu. Wady Niektóre wady C++ są odziedziczone z języka przodka - C - i są spowodowane początkowo postawionym wymogiem jak największej kompatybilności z C. Są to wady, takie jak: Składnia prowokująca błędy: Preprocesor wywodzący się z C jest bardzo prymitywny. Słabe wsparcie dla modułowości (w rzeczywistości w klasycznym C nie ma modułowości na poziomie języka, jej dostarczanie jest przesunięte do linkera). Włączenie interfejsu zewnętrznego modułu poprzez wstawienie przez preprocesor pliku nagłówkowego (#include) poważnie spowalnia kompilację, gdy dołączana jest duża liczba modułów (ponieważ plik wynikowy przetwarzany przez kompilator okazuje się bardzo duży).
Pascala. Język Pascal, który pojawił się w 1972 roku, został nazwany na cześć wielkiego francuskiego matematyka z XVII wieku, wynalazcy pierwszej na świecie maszyny arytmetycznej, Blaise'a Pascala. Język ten został stworzony przez szwajcarskiego informatyka Niklausa Wirtha jako język do nauczania metod programowania. Pascal to język programowania ogólnego przeznaczenia. Cechami języka są ścisłe typowanie i dostępność strukturalnych (proceduralnych) narzędzi programistycznych. Pascal był jednym z pierwszych takich języków. Według N. Wirtha język powinien przyczyniać się do dyscypliny programowania, dlatego wraz z mocnym typowaniem w Pascalu minimalizowane są ewentualne niejasności składniowe, a sama składnia jest intuicyjna nawet przy pierwszym zapoznaniu się z językiem. Język Pascal uczy nie tylko poprawnego pisania programu, ale także poprawnego opracowania metody rozwiązania problemu, wyboru sposobów reprezentacji i organizacji danych użytych w zadaniu. Od 1983 roku język Pascal jest wprowadzany na kursy informatyki w szkołach średnich w Stanach Zjednoczonych.
Język programowania Delphi (Delphi)- środowisko programistyczne wykorzystujące język programowania Delphi (od wersji 7 język w środowisku nosi nazwę Delphi, dawniej Object Pascal), opracowane przez firmę Borland i oryginalnie zaimplementowane w jej pakiecie Borland Delphi, od którego otrzymała obecną nazwę w 2003. Object Pascal - zasadniczo następca Język Pascala z rozszerzeniami zorientowanymi obiektowo. Delphi zapewnia projekt wizualny interfejs użytkownika, ma rozwinięty język obiektowy Pascal obiektowy(później przemianowany na Delphi) i narzędzia dostępu do baz danych, które są unikalne w swojej prostocie i mocy. Język Delphi znacznie przewyższył Podstawowy język a nawet w pewnym sensie język C++, ale jednocześnie okazał się bardzo niezawodny i łatwy do nauczenia (zwłaszcza w porównaniu z językiem C++). W rezultacie środowisko Delphi ułatwiło programistom tworzenie własnych komponentów i budowanie z nich profesjonalnych programów.
Jawa to zorientowany obiektowo język programowania opracowany przez firmę Sun Microsystems 23 maja 1995 r. Programy Java są tłumaczone na wykonywalny kod bajtowy maszyna wirtualna Java (JVM) to program, który przetwarza kod bajtowy i przekazuje instrukcje do sprzętu jako interpreter. Zaletą takiego sposobu uruchamiania programów jest całkowita niezależność kodu bajtowego od systemu operacyjnego i sprzętu, co pozwala uruchamiać aplikacje Java na dowolnym urządzeniu, dla którego istnieje odpowiednia maszyna wirtualna. Kolejną ważną cechą technologii Java jest elastyczny system bezpieczeństwa ze względu na fakt, że wykonywanie programu jest całkowicie kontrolowane przez maszynę wirtualną. Każda operacja wykraczająca poza ustawione uprawnienia programu (na przykład próba nieautoryzowanego dostępu do danych lub połączenia z innym komputerem) powoduje natychmiastowe przerwanie. Często do niedociągnięcia Pojęcie maszyny wirtualnej odnosi się do faktu, że wykonanie kodu bajtowego przez maszynę wirtualną może obniżyć wydajność programów i algorytmów zaimplementowanych w języku Java. W ostatnim czasie wprowadzono szereg usprawnień, które nieznacznie zwiększyły szybkość wykonywania programów w Javie: zastosowanie technologii tłumaczenia kodu bajtowego na kod maszynowy bezpośrednio podczas działania programu (technologia JIT) z możliwością zapisywania wersji klasowych w kodzie maszynowym, powszechne stosowanie kodu zorientowanego na platformę (kod natywny) w standardowych bibliotekach, sprzęt zapewniający przyspieszone przetwarzanie kodu bajtowego (na przykład technologia Jazelle, obsługiwana przez niektóre procesory ARM).
Kluczowe cechy: automatyczne zarządzanie pamięcią; zaawansowane opcje obsługi wyjątków; bogaty zestaw narzędzi do filtrowania wejścia/wyjścia; zestaw standardowych kolekcji, takich jak tablica, lista, stos itp.; Dostępność proste środki tworzenie aplikacji sieciowych (w tym z wykorzystaniem protokołu RMI); wbudowane narzędzia językowe do tworzenia aplikacji wielowątkowych; równoległe wykonywanie programów.
Tak więc w naszych czasach istnieje wiele języków, a każdy z nich ma swoje własne cechy.