języki wysokiego poziomu

advertisement
JĘZYKI PROGRAMOWANIA
I ICH KLASYFIKACJA
Cel: Wprowadzenie do
programowania: języki i ich
charakterystyka.
Uczeń wymienia najbardziej znane
języki programowania, rozróżnia
interpretery i kompilatory
Program. Język programowania
• Program - zapis algorytmu w języku programowania
Program komputerowy - algorytm zapisany w języku
programowania (zapisany na nośniku w postaci pliku
źródłowego lub wykonywalnego).
• Język programowania:
sformalizowany (zgodny z pewnymi regułami),
zbliżony do języka naturalnego
sposób zapisu algorytmu,
tak aby był możliwy po kompilacji
do wykonania przez komputer.
Język programowania
• Język programowania – jeden ze sposobów
zapisu algorytmu.
• Sztuczny język (w odróżnieniu do języków
naturalnych), pozwala na zapis zadania i sposobu
jego wykonania przez komputer.
• Jest to zbiór zasad określających, kiedy ciąg
symboli (opisujący np. obliczenia) tworzy
program oraz jakie obliczenia opisuje.
• Język programowania określony jest przez
podanie jego składni i semantyki - ścisłych zasad
tworzenia - instrukcji, określających elementarne
(w danym języku) operacje.
Programowanie
• Programowanie to pisanie ciągów instrukcji
(programu), który ma wykonać właśnie
procesor.
• Instrukcje te powinny być zapisane w postaci
ciągów zer i jedynek, aby procesor był w stanie
je poprawnie zinterpretować (zrozumiały dla
procesora język zer i jedynek nazywamy
językiem maszynowym).
Instrukcje dla procesora
• Instrukcje te powinny być zapisane w postaci
ciągów zer i jedynek, aby procesor był w stanie
je poprawnie zinterpretować
• Zrozumiały dla procesora język zer i jedynek
nazywamy językiem maszynowym.
Język maszynowy
• Program w języku maszynowym, rozumianym
przez komputer jest ciągiem cyfr binarnych –
zer i jedynek.
Program taki jest praktycznie nieczytelny dla
człowieka.
• W praktyce do pisania instrukcji do
bezpośredniego wykonania przez komputer
używa się języka programowania niskiego
poziomu tzw. asemblera.
Asembler
• Kodom instrukcji dla procesora odpowiadają
symbole literowe. Są to skróty nazw czynności.
• Również adresy komórek mają nazwy literowe
a kompilator zamienia je na adresy liczbowe
• Przykład: MOV AX DANE
– AX – rejestr procesora
– MOV – przesuń
– DANE – etykieta komórki pamięci z danymi do
przeniesienia do rejestru AX
Programowanie w Asemblerze
• Programowanie w Asemblerze polega na pisaniu
ciągu instrukcji w bardziej przyjazny dla człowieka
sposób.
• Nie trzeba posługiwać się liczbami dwójkowymi, lecz
krótkimi, z reguły trzyliterowymi poleceniami.
• Procesor nie potrafi jednak wykonać programu
napisanego w Asemblerze. Trzeba program
przetłumaczyć na postać binarną - maszynową
• Dlatego razem z opracowaniem Asemblera
stworzono też specjalny program tłumaczący, który
nazywamy kompilatorem
Kompilator, kompilacja
• Kompilator to program, który tłumaczy kod
pewnego języka programowania na język
maszynowy - ciąg zer i jedynek,
które potrafi wykonać procesor.
• Proces tłumaczenia programu na język
maszynowy nazywamy kompilacją.
Języki wysokiego poziomu
• Programista Asemblera nie musi już co prawda
używać wyłącznie zer i jedynek, jednak
programowanie w Asemblerze nadal jest
trudne i wymaga dużej wiedzy i cierpliwości.
• Dla ułatwienia programowania wymyślono tak
zwane języki wysokiego poziomu.
• Jednym z nich jest Pascal.
Programowanie w języku wysokiego poziomu – kod źródłowy
• Programowanie w języku wysokiego poziomu polega
na zapisaniu ciągu instrukcji za pomocą zbliżonych
wyrażeń zbliżonych do mowy człowieka ( z reguły jęz.
angielskiego) – dzięki temu jest proste.
• Program napisany w języku wysokiego poziomu to
tzw. kod źródłowy
• Aby móc taki program uruchomić, należy go najpierw
skompilować (czyli przetłumaczyć na przykład z
języka Pascal na język maszynowy).
Instrukcje
• W przypadku tzw. języków wysokiego
poziomu (m.in. Algol, Fortran, Cobol, C, BASIC,
Pascal, Logo, Lisp, Prolog) instrukcje
budowane są z
– pewnej liczby słów angielskich,
– znaków operacji matematycznych i
logicznych,
– stałych liczbowych oraz
– symbolicznych nazw zmiennych
Klasyfikacja języków programowania
• Języki programowania mogą być podzielone
ze względu na:
– Paradygmat programowania
– Generację języka programowania
– Sposób kontroli typów.
– Sposób wykonywania (kompilacja, interpretacja).
– Poziom (języki niskopoziomowe są bardziej
zbliżone pod względem budowy do działania
sprzętu).
– Przeznaczenie.
Języki niestrukturalne, strukturalne, obiektowe
• Języki niestrukturalne - FORTH, BASIC
• Języki strukturalne (program budowany jest z
mniejszych elementów: procedur, funkcji itp.),
np. Pascal, C, FORTRAN
• Języki obiektowe (program składa się z
obiektów, które posiadają właściwości
i potrafią wykonywać operacje),
np. C++, Java - języki zorientowane obiektowo.
Podział języków wg poziomu
• 1. Języki niskiego poziomu tzw. asemblery
• 2. Języki wysokiego poziomu, języki
uniwersalne służące do rozwiązywania
szerokiego zakresu problemów (Pascal, C,
Logo, Basic, itd.)
• 3. Języki zorientowane problemowo,
nastawione na wąski zakres problemów
(HTML, PHP, VBA, dBase)
Języki wewnętrzne i zewnętrzne
Języki programowania dzielimy na:
• języki wewnętrzne
(binarne lub asemblery),
• języki zewnętrzne
(FORTRAN, COBOL, PASCAL, C, BASIC,
CLIPPER …).
Generacje języków
•
•
•
•
Wewnętrzne (binarne lub asemblery),
maszynowe,
algorytmiczne (Pascal, częściowo C),
języki czwartej generacji (w tym niektóre
języki do tworzenia aplikacji na bazie danych
np. SQL)
Pod względem stopnia zaawansowania:
• Języki pierwszej generacji - są to języki maszynowe, czyli języki
procesorów. Instrukcje są w nich zapisywane w postaci liczb binarnych.
• Języki drugiej generacji - języki symboliczne, asemblery.
• Języki trzeciej generacji - języki wysokiego poziomu,
proceduralne (imperatywne). Do tej grupy należą między innymi:
FORTH, BASIC - języki niestrukturalne, Pascal, C, FORTRAN - języki
strukturalne, C++, Java - języki zorientowane obiektowo.
• Języki czwartej generacji - języki bardzo wysokiego poziomu,
nieproceduralne (deklaratywne). Przykładem języka z tej grupy jest:
SQL.
• Języki piątej generacji - języki sztucznej inteligencji, języki
systemów ekspertowych. Języki najbardziej zbliżone do języka
naturalnego. Przykładem języka piątej generacji jest PROLOG.
Języki pierwszej generacji
• Języki pierwszej generacji - są to języki maszynowe,
czyli języki procesorów.
• Instrukcje są w nich zapisywane w postaci liczb
binarnych.
• Przykładowy kod programu:
111010100000000000001111111111111111100010
011101100000000010100000001
Języki drugiej generacji
• Języki drugiej generacji - języki symboliczne, asemblery.
• Języki niskiego poziomu, pod względem składni tożsame z
maszynowymi, z tą różnicą że zamiast liczb używa się tu
łatwiejszych do zapamiętania mnemoników.
• Przykładowy kod programu:
jmp ffff:0
movax, bx
add ax, 1
Pod względem znaczenia kod ten jest jednoznaczny z kodem
binarnym przedstawionym w poprzednim punkcie (tylko dla
procesorów z grupy 80x86).
Języki trzeciej generacji
• Języki wysokiego poziomu, proceduralne (imperatywne).
• W językach tych jedna instrukcja jest tłumaczona na kilka
instrukcji procesora.
• Pierwszym językiem tego typu był ALGOL.
Do tej grupy należą między innymi:
– FORTH, BASIC - języki niestrukturalne,
– Pascal, C, FORTRAN - języki strukturalne,
– C++, Java - języki zorientowane obiektowo.
• Przykładowy kod:
if(!x)
{
printf("Nie wolno dzielić przez zero\n");
return 1;
}
Języki czwartej generacji
• Języki bardzo wysokiego poziomu, nieproceduralne
(deklaratywne).
• Korzystając z tych języków programista skupia się na
problemie, a nie na sposobie jego rozwiązania (języki
zorientowane problemowo, task oriented languages).
• Syntaktyka wielu języków czwartej generacji przypomina
składnię języka naturalnego.
• Języki te są one często używane do dostępu do baz danych.
Przykładem języka z tej grupy jest: SQL.
• Przykładowy kod:
SELECT Towar FROM „Faktura" WHERE Cena >= 500
Języki pod względem przeznaczenia
• Bazodanowe: dBase, Clipper, FoxPro, Access, Delphi, SQL-owe
(np. Oracle).
Ukierunkowanie na tworzenie aplikacji baz danych (zbiór informacji
jednorodnych, łatwiej dopisywać informacje, dostosowanie do pracy w
sieci, sortowanie)
• Obliczeniowe (naukowo techniczne, statystyka), np.
Fortran (są biblioteki do grafiki), Pascal, C/C++ (ojciec Pascal, matka
assembler), podobny do UNIXa, wykonuje instrukcje nie dyskutuje.
Jest jakby językiem uniwersalnym, właściwości sieciowe.
C++ cechuje obiektowość. Gorzej z zastosowaniami bazodanowymi, biblioteka
funkcji matematycznych mniejsza niż w Fortranie.
• Specjalizowane: sztuczna inteligencja, systemy ekspertowe,
przetwarzanie list, do symulacji procesów
• Języki typu "Visual" (np. Visual C++, C#, Visual Basic, Delphi)
Języki strukturalne, obiektowe
• Języki niestrukturalne
• Języki strukturalne (program budowany jest z
mniejszych elementów: procedur, funkcji itp.),
np. Pascal
• Języki obiektowe (program składa się z
obiektów, które posiadają właściwości i
potrafią wykonywać operacje), np. C+
Implementacja (kodowanie)
• W fazie implementacji następuje proces kodowania (pisania
oprogramowania w konkretnym języku), projekt zostaje
zaimplementowany w konkretnym środowisku
programistycznym oraz wykonywane są testy poszczególnych
modułów.
• Wydzielenie modułów funkcji
• Wstępne testowanie (debugger)
• Dokumentacja techniczna dla programisty.
Komentuje algorytm a nie instrukcje.
Opis procedur, funkcji, danych we/wy
• Kompilacja, usunięcie błędów (kod max zbliżony do ANSII, nie
ignorować ostrzeżeń)
Program- zapis algorytmu może mieć postać:
1. źródłową - w pewnym języku
programowania
2. kodu pośredniego - ciąg instrukcji
wykonywanych przez interpreter
3. binarną - skompilowana - ciąg instrukcji
do wykonania bezpośredniego przez
procesor
Interpretery
• Interpretery – interpretują program a nie
kompilują.
• Tłumaczą program w następujący sposób:
1.
2.
3.
4.
pobierają jedną instrukcję programu
tłumaczą na język maszynowy
dają procesorowi do wykonania
powracają do pkt. 1.
• Językami interpretowanymi są na przykład:
BASIC, SQL, JavaScript.
Plusy i minusy interpretera
• Aby uruchomić program zapisany w języku interpretowanym
należy zawsze posiadać interpreter, bez niego program po
prostu nie będzie działać. W związku z tym jeżeli chcemy
sprzedać komuś program napisany w języku interpretera
należy sprzedać go razem z interpreterem.
• Programy zapisane w języku interpretowanym działają powoli,
np. jeżeli w programie jakaś instrukcja ma być wykonywana
tysiąc razy to interpreter będzie ją tysiąc razy tłumaczył.
• Dobrą stroną interpreterów jest fakt, że programy napisane w
ich językach charakteryzują się bardzo dużą przenośnością.
To znaczy, że program napisany np. na komputerze PC na 99%
będzie działał na komputerach iMac - należy mieć
odpowiedni interpreter dla iMac-a
Kompilatory
• Kompilatory działają w następujący sposób:
– tłumaczą cały program
– zapisują przetłumaczony program w pamięci komputera
lub na dysku
• Program po przetłumaczeniu (skompilowaniu) przez
kompilator jest gotowy do wykonania.
• Językami kompilowanymi są na przykład:
– Pascal,
– C, C++,
– Asembler,
– COBOL, itp.
Plusy i minusy kompilatorów
• PLUSY
– Programy skompilowane wykonują się szybciej niż
interpretowane (nie muszą być na bieżąco tłumaczone),
mają postać np. COM, EXE jako pliki wykonywalne.
– Nie potrzeba kompilatora aby uruchomić program
• MINUSY
– Negatywną cechą kompilatorów jest przenośność
programów.
Programy skompilowane za pomocą kompilatora są w większości
nieprzenośne, np. program napisany dla komputera iMac nie będzie
działał na komputerze PC.
Aby program zadziałał na innym rodzaju komputera należy program na
tym komputerze skompilować.
Elementy języka programowania
Na język programowania składa się kilka elementów:
• Składnia: Rodzaje dostępnych symboli – alfabet języka.
• Semantyka języka programowania definiuje precyzyjnie
znaczenie poszczególnych symboli oraz ich funkcję w
programie – gramatyka języka programowania.
Definiuje znaczenie poszczególnych sekwencji znaków
Semantykę najczęściej definiuje się słownie, ponieważ większość z jej
zagadnień jest trudna lub wręcz niemożliwa do ujęcia w jakikolwiek
formalizm. Część błędów semantycznych można wychwycić już w
momencie wstępnego przetwarzania kodu programu, np. próbę
odwołania się do nieistniejącej funkcji, lecz inne mogą ujawnić się
dopiero w trakcie wykonywania.
Typy danych
• Większość języków posiada typy danych do reprezentowania:
– Liczb całkowitych w różnych zakresach.
– Liczb zmiennoprzecinkowych (reprezentacje liczb
rzeczywistych o różnym stopniu dokładności)
– Ciągów tekstowych.
• Od strony sprzętowej wszystkie te informacje wyrażane są za
pomocą sekwencji zer i jedynek.
Język programowania nakłada jedynie odpowiednie
ograniczenia i zasady ich przetwarzania.
Biblioteki standardowe
• Dla większości języków zdefiniowana biblioteka standardowa
zawierająca podstawowy zestaw funkcji pozwalających
realizować wszystkie najważniejsze operacje, np.:
– Obsługę wejścia-wyjścia.
– Obsługę plików.
– Obsługę wielowątkowości.
– Zarządzanie pamięcią.
– Podstawowe typy danych oraz funkcje do
zarządzania nimi.
– Operacje na ciągach tekstowych.
Podsumowanie koncepcji języków programowania
•
•
•
•
•
W pamięci komputera program jest przechowywany jako kod maszynowy, będący
instrukcjami dla konkretnego procesora. Instrukcje te przechowywane są w
systemie zero-jedynkowym – język maszynowy.
Dla ułatwienia programowania niskopoziomowego utworzono asembler
(assembler), którego rozkazy odpowiadają bezpośrednio instrukcjom procesora,
jednak zapisywane są w bardziej zrozumiałej dla nas formie.
Później powstały języki interpretowane nie mające już tak bliskiego związku z
procesorem, ale nadal podobnie jak asembler stanowiące jeden ciąg instrukcji.
Przykładem takiego języka może być ogólnie znany Basic (GWBasic, Qbasic, inne).
Jedna instrukcja języka drugiej generacji, może być tłumaczona na kilka,
kilkadziesiąt a czasem więcej instrukcji procesora.
Języki kolejnej generacji, np. Pascal, rozwinęły koncepcję programowania o
możliwość podzielenia programu na moduły wykonujące różne operacje
wchodzące w jego skład.
Następną generację języków programowania tworzą tak zwane języki obiektowe,
np. Delphi, Visual Basic, C++.
Najpopularniejsze języki programowania
•
•
•
•
•
•
•
•
•
•
Java
C
C++
PHP
Visual Basic
C#
Python
Perl
Objective-C
Delphi
Basic
•
•
•
•
•
•
BASIC (Beginner's All-purpose Symbolic Instruction Code) - język programowania
wysokiego poziomu, opracowany w 1964 przez Johna George'a Kemeny'ego i
Thomasa E. Kurtza w Dartmouth College w oparciu o Fortran i Algol-60.
Założenia projektantów BASIC-a uwzględniały łatwość użytkowania,
wszechstronność zastosowań, interaktywność i dobrą komunikację z
użytkownikiem poprzez jasne komunikaty błędów.
BASIC wybił się na czoło języków do zastosowań amatorskich i półprofesjonalnych
po wprowadzeniu na rynek mikrokomputera Altair 8800. BASIC szybko
zaimplementowany został przy budowie serii komputerów Apple, a później jako
GW BASIC w IBM
Następcą GW BASIC-a dla komputerów PC został QB, później rozprowadzany
komercyjnie jako QuickBASIC, który w końcu wyewoluował w Visual Basic for
Windows.
Istnieją też alternatywne interpretery i kompilatory tego języka dla platformy
win32 (Power BASIC, DarkBASIC itp.). Wersja darmowa to np. JustBASIC.
Just BASIC is a programming language for the Windows operating system. It is completely
free and it is suitable for creating all kinds of applications for business, industry, education
and entertainment. Just BASIC borrows many features from our popular commercial product,
Liberty BASIC.
TURBO PASCAL
• Turbo Pascal to bardzo popularny język programowania, zorientowany na
naukę programowania strukturalnego.
Pascal powstał w 1971 roku, kiedy to Niklaus Wirth opublikował pierwszy
artykuł o nim, jego upowszechnienie nastąpiło po roku 1974.
• Język Pascal miał służyć przede wszystkim do nauki programowania
strukturalnego, tj. programowania dużych systemów tzw. metodą "z góry
na dół", czyli określania dużych elementów poprzez elementy niższego
rzędu, aż do końcowych elementów programowych realizujących
określone funkcje.
• Pascal jest on dobry do nauki podstaw programowania.
Zyskał on dużą popularność dzięki prostej i ścisłej składni oraz czytelnej
budowie programu, która łatwo może być modyfikowana.
• Turbo Pascal, został wprowadzony na rynek w 1983 roku przez
amerykańską firmę Borland International Inc.
C/C++
• Język C opracował i zrealizował w latach siedemdziesiątych Dennis Ritchie
jako narzędzie do stworzenia systemu operacyjnego Unix.
• C jest językiem strukturalnym i zajmuje on miejsce pomiędzy typowymi
językami wysokiego poziomu jak Pascal, Basic lub FORTRAN, a
asemblerami.
Dużą popularność język C zawdzięcza m.in. nowoczesnemu sterowaniu, prostocie
wyrażeń oraz nowoczesnym strukturom danych i wielkiemu bogactwu operatorów.
• Zaletą C jest jego "zorientowanie maszynowe" np. typy int, char, double
float, pointer są tłumaczone prawiew stosunku 1:1 na konstrukcje kodu
maszynowego
• Obiektowa wersja C, czyli C++, została opracowana przez Bjarne
Stroustrup'a z AT&T Bell Laboratories.
C++ jest językiem strukturalnym z dodatkowymi konstrukcjami
umożliwiającymi programowanie obiektowe i usprawniającymi składnię
proceduralną. Język ten zyskał popularność ponieważ daje programiście
możliwość tworzenia spójnego, szybkiego i niezawodnego kodu.
Paradygmaty programowania
• Paradygmat to przyjęty sposób widzenia rzeczywistości w
danej dziedzinie, doktrynie itp.
Jak to się ma do programowania?
Greckie παράδειγμα oznacza wzorzec bądź przykład.
Chodzi tu zbiór mechanizmów, jakich programista
używa, pisząc program, i o to, jak ów program jest
następnie wykonywany przez komputer.
Paradygmat programowania to ogół oczekiwań
programisty wobec języka programowania i
komputera, na którym będzie działał program.
Pardygmaty programowania - rodzaje
•
•
•
•
•
•
•
Programowanie imperatywne
Programowanie obiektowe
Programowanie funkcyjne
Programowanie w logice
Programowanie strukturalne
Programowanie sterowane przepływem danych
Programowanie sterowane zdarzeniami
• Programowanie współbieżne
Programowanie imperatywne:
•
•
•
•
•
•
zmienne
struktura blokowa
wiązanie statyczne i dynamiczne
organizacja wywołań podprogramów
przydział pamięci na stosie i na stercie
przykłady z języków Ada, C, Pascal
Programowanie obiektowe:
•
•
•
•
•
•
klasy jako abstrakcyjne typy danych
dziedziczenie
późne (dynamiczne) wiązanie wywołań
polimorfizm
szablony i klasy rodzajowe
przykłady z języków C++, Java, C#, Ada 95,
Smalltalk
Programowanie funkcyjne:
•
•
•
•
•
•
•
•
funkcje jako model programowania
rachunek lambda
dopasowywanie wzorca
nadawanie typów
rekursja
leniwa ewaluacja
funkcje wyższego rzędu
przykłady z języków Lisp, Scheme, ML, Haskell
Programowanie w logice:
• rachunek predykatów w Prologu
• rezolucja
• listy
Języki wg różnych kryteriów
• wieloparadygmatowe : Ada • Clojure • Common Lisp • D • Icon • Lua •
Nemerle • PHP • Python • Ruby • Scala • Snobol
• proceduralne i strukturalne : AWK • C • COBOL • Forth • Fortran •
Modula-2 • Oberon • Pascal • Perl • PLEX • PL/SQL • REXX
• obiektowe: ActionScript • C++ • C++/CLI • C# • Delphi • Delphi.NET •
Delphi Prism • Eiffel • Java • JavaScript • Object Pascal • Objective-C •
Oxygene • Smalltalk • VB.NET
• Funkcyjne: Clojure • Erlang • F# • Haskell • Lisp • ML • OCaml • Scheme
• Logiczne: Prolog
• edukacyjne : Comal • Logo • Small Basic
• historyczne : ALGOL • APL • BASIC • Clascal • Clipper • JAS • Lisp •
MUMPS • PLAN • PL/I • PL/M • SAKO • SAS (asembler) • Simula
• inne : ABAP • Asembler • C-- • GAUSS • Lustre • MCPL • occam • QCL •
SAS 4GL • SQL • Visual Basic
Języki programowania szeroko rozumiane - kategorie:
• skryptowe (np.: skrypty powłoki systemu operacyjnego)
• obsługi stron internetowych - po stronie serwera
(np.: PHP, JSP)
• obsługi stron internetowych - po stronie klienta
(np.: JavaScript, JScript, VBScript, ActionScript)
• opisu dokumentów (np.: HTML, TeX)
• opisu danych (np.: XML)
• przetwarzania tekstu i danych (np.: AWK, Perl)
• programowania baz danych (np.: PL/SQL)
• ogólnego przeznaczenia
(np.: C++, C#, Delphi, Java, Assembler)
Download