2010-05-17
1
Języki programowania
Język
zbór znaków i symboli oraz reguł
określających sposoby i kolejność ich
użycia
Język algorytmiczny – język, który jest
stosowany do zapisywania algorytmów.
Język programowania – język
algorytmiczny stosowany do celów
programowania.
2010-05-17
2
Język programowania
zbiór zasad składni oraz instrukcji, dzięki
którym programista tworzy kod źródłowy
programu.
Programista używa języka programowania
zrozumiałego dla człowieka, który jest
tłumaczony do postaci kodu maszynowego.
Procesor wykonuje program zapisany w
kodzie maszynowym.
Przykład programu w języku C
2010-05-17
3
Kod źródłowy
program komputerowy napisany w języku
programowania.
postać programu, która jest zrozumiała dla
programisty (bez konieczności jego
uruchamiania).
jest przekształcany na kod maszynowy w
procesie translacji (kompilacji lub
interpretacji) programu.
Kod maszynowy
język rozumiany przez procesor.
Program w kodzie maszynowym składa się z
ciągu wartości binarnych, które oznaczają
zarówno instrukcje jak i dane.
Postać kodu maszynowego zależy od
architektury procesora.
2010-05-17
4
Translacja
Program napisany w języku programowania
musi zostać przetłumaczony na kod
maszynowy, aby mógł być wykonany przez
procesor.
Translacja oznacza tłumaczenie programu
napisanego w języku programowania z
postaci źródłowej do postaci wynikowej
zrozumiałej dla maszyny (procesora).
Translator
Translator to specjalny program (lub
urządzenie) dokonujący translacji.
Translatory dzieli się na:
kompilatory i interpretery tłumaczące
programy zapisane w językach wysokiego
poziomu,
assemblery tłumaczące programy zapisane
w językach symbolicznych.
.
2010-05-17
5
Kod wynikowy
Kod maszynowy uzyskany jako rezultat pracy
translatora (kompilatora lub interpretera),
nadający się do bezpośredniego
wykonywania przez procesor albo
wymagający dalszej obróbki (np.
konsolidacji).
Czasami zamiast określenia kod wynikowy
używa się nazwy kod obiektowy.
Translacja
2010-05-17
6
Kompilator
program służący do automatycznego
tłumaczenia kodu źródłowego w języku
programowania na kod maszynowy.
Niektóre kompilatory tłumaczą najpierw do
języka asemblera, a ten na język maszynowy
jest tłumaczony przez asembler.
Stosowanie kompilatorów ułatwia
programowanie (programista nie musi znać
języka maszynowego) i pozwala na większą
przenośność kodu pomiędzy platformami.
2010-05-17
7
Interpreter
program, który analizuje kod źródłowy i wykonuje
przeanalizowane fragmenty (instrukcje).
Inaczej niż dla procesu kompilacji, podczas którego
nie wykonuje się instrukcji kodu źródłowego.
Wykonanie programu za pomocą interpretera jest
wolniejsze, wymaga więcej zasobów systemowych
niż wykonanie kodu skompilowanego.
Etapy translacji
2010-05-17
8
Preprocesing
wstępne przygotowanie programu do właściwej
kompilacji.
Dołączane są dodatkowe pliki z kodem
źródłowym.
Dodawane są do kodu źródłowego deklaracje
używanych funkcji i/lub informacja o
stosowanych zmiennych.
Tak przetworzony kod źródłowy poddawany jest
analizie składniowej i translacji.
Preprocesor jest najczęściej zintegrowany z
kompilatorem/interpreterem
.
Translacja
tłumaczenie kodu źródłowego na kod
wynikowy (binarny) zrozumiały dla procesora.
2010-05-17
9
Konsolidacja
dołączanie bibliotek do tworzonego programu
(kodu wynikowego).
Jeżeli używane są funkcje z biblioteki,
niezbędne jest dołączenie biblioteki do
programu.
Biblioteka jest również „programem”, który nie
może być samodzielnie uruchomiony.
Zawiera funkcje, do których odwołują się inne
programy.
Po konsolidacji program jest gotowy do użycia.
Generacje
języków
programowania
Można wyróżnić pięć wyraźnie różniących się
generacji języków programowania (1GL-5GL).
W miarę rozwoju techniki komputerowej,
wystąpiła konieczność dostarczania narzędzi
programistycznych, które umożliwiłyby
maksymalne wykorzystanie sprzętu.
Nie ma pełnej zbieżności chronologicznej
między poszczególnymi generacjami języków i
sprzętu.
2010-05-17
10
1GL
Programowanie odbywało się bezpośrednio
w kodzie binarnym (ciągi zer i jedynek).
Każdy typ komputera operuje własnym
kodem maszynowym.
Główna wada: programista każdorazowo
musi dostosowywać się do języka konkretnej
maszyny.
2GL
Ciągom zerojedynkowym przypisano łatwiejsze do
zrozumienia znaki mnemoniczne.
Języki symboliczne, zwane też językami asemblera.
stanowią proste tłumaczenie języka maszynowego na
symbole,
są ściśle związane z danym modelem procesora.
Przykład:
mov dx, offset info
mov ah, 9
int 21h
mov ah, 0
int 16h
2010-05-17
11
3GL
Języki wysokiego poziomu.
Symbole asemblera reprezentujące konkretne
instrukcje zostały zastąpione kodem
niezwiązanym z maszyną, bardziej zbliżonym
do języka naturalnego lub matematycznego.
Przykład:
for i:=1 to MaxN do
begin
Vx[i]:=Vx[i]+dx[i];
end;
4GL
Języki programowania wraz z zestawem narzędzi,
które umożliwiają budowę prostych aplikacji przez
zestawianie „prefabrykowanych” modułów.
Często stanowią rozszerzenie języków już
istniejących.
W niektórych przypadkach stosuje się nazwę „czwarta
generacja” w odniesieniu do programowania
obiektowego
2010-05-17
12
Przykłady języków 4GL
Języki zapytań do baz danych
SQL
Generatory raportów / stron
Oracle Reports
Przetwarzanie danych, analiza i raportowanie
GraphTalk
Informix-4GL
Języki strumienia danych
APE
AVS
Iris Explorer
Generatory formularzy
Oracle Forms
Tworzenie GUI
Delphi
Visual Basic (edycja formatek )
Windows Forms (część .NET)
5GL
języki używane do tworzenia programów
wykorzystujących sztuczną inteligencję,
systemy ekspertowe.
Przykład: PROLOG
2010-05-17
13
Podział języków
programowania
Podział ze względu na generację języka
programowania
Podział ze względu na sposób translacji
Podział ze względu na strukturę
Podział ze względu na zastosowanie
Podział JP
ze względu na rodzaj translacji:
kompilowane,
interpretowane.
2010-05-17
14
Podział JP
Podział ze względu na strukturę (1):
języki proceduralne (imperatywne)
programista określa JAKIE operacje maja być
wykonane i w JAKIEJ KOLEJNOŚCI.
Przykład: C, Pascal
języki nieproceduralne (deklaratywne)
programista opisuje to, CO chce wykonać. Decyzja
JAK to wykonać należy do translatora.
Przykład: SQL
Podział JP
Podział ze względu na strukturę (2):
języki strukturalne
(Fortran, Pascal, Algol)
języki zorientowane obiektowo
(C++ , Visual C++, Object Pascal, Smalltalk,
Objective-C, Eiffel , Lisp, Oberon, Actor , CLOS,
Ada95, Prolog++, Zink, JAVA, J++, Visual
Objects, Python):
2010-05-17
15
Podział JP
Podział języków ze względu na zastosowania:
algorytmiczne: do zapisywania algorytmów
algebraiczne (Fortran, Pascal, C) - do zapisu
algorytmów numerycznego przetwarzania
informacji,
ekonomiczne (COBOL, PL/1) -
opis algorytmów
przetwarzania informacji o charakterze
ekonomicznym, bankowym, handlowym.
do symbolicznego przetwarzania informacji (LISP) -
do zapisu algorytmów przetwarzania informacji
numerycznych i na danych symbolicznych.
Podział JP
Podział języków ze względu na
zastosowania, cd:
języki symulacyjne (SIMULA) - ułatwiają
opisywanie algorytmów modelowania i symulacji
bezpośredniego dostępu (BASIC) - pozwalają na
konwersację z maszyną.
problemowe -
ściśle dostosowane do konkretnej
klasy zadań.
2010-05-17
16
Zintegrowane środowisko
programistyczne (IDE)
Translator
Biblioteki i dodatkowe pliki wsadowe
Edytor kodu
Debugger
Edytor formularzy
Menadżer projektu
Narzędzia dodatkowe
System pomocy
Przykłady środowisk
programistycznych: Delphi
2010-05-17
17
Przykłady środowisk
programistycznych: SharpDevelop
Biblioteki i dodatkowe pliki
wsadowe
służą do rozszerzania możliwości języka,
szczególnie w zakresie pewnych zastosowań
(np. obliczeń matematycznych, numerycznych,
obróbki grafiki).
Biblioteki podstawowe dostarczane są wraz z
środowiskiem programistycznym, biblioteki
dodatkowe rozprowadzane są w postaci
osobnych pakietów.
2010-05-17
18
Edytor kodu
służy do pisania tekstu kodu źródłowego.
Poprawia znacznie przejrzystość i wygodę tworzenia
kodu.
Edytory mogą być uniwersalne lub zintegrowane z
konkretną implementacją języka.
Edytory uniwersalne pozwalają na podłączanie
kompilatorów jednego lub wielu języków i są
rozprowadzane jako oddzielne programy.
Edytor kodu
służy do pisania tekstu kodu źródłowego.
Poprawia znacznie przejrzystość i wygodę tworzenia
kodu.
Edytory mogą być uniwersalne lub zintegrowane z
konkretną implementacją języka.
Edytory uniwersalne pozwalają na podłączanie
kompilatorów jednego lub wielu języków i są
rozprowadzane jako oddzielne programy.
2010-05-17
19
Debugger
służy do analizy poprawności tworzonego kodu
źródłowego
stanowi zazwyczaj integralną część translatora
Podczas analizy kodu źródłowego generowane są
informacje o błędach na bieżąco (analizator
zatrzymuje się w miejscu wykrycia błędu) lub też w
postaci końcowego raportu.
Oprócz informacji o błędach, analizatory podają
również tzw. ostrzeżenia, tzn. informacje o znalezieniu
niejasności w kodzie lub o wykryciu miejsca
potencjalnie niebezpiecznego.
Debugger
2010-05-17
20
Edytor formularzy
służy do budowy okien widzianych przez
użytkownika po uruchomieniu programu
(formularzy).
Zaletą stosowania tego narzędzia jest łatwość
tworzenia dowolnie skomplikowanych okien i
określania ich właściwości.
Brak edytora formularzy nie przesądza o tym,
że nie można tworzyć standardowych,
„okienkowych” aplikacji – wygląd definiowany
jest wówczas przez programistę w kodzie
źródłowym.
Edytor formularzy
2010-05-17
21
Menadżer projektu
służy do zarządzania modułami i plikami projektu.
Do kompilacji programu zwykle potrzebnych jest wiele plików,
które zawierają:
poszczególne moduły kodu,
biblioteki,
pliki wsadowe,
grafikę i pliki multimedialne.
Zazwyczaj istnieje główny plik projektu zawierający wszystkie
potrzebne do kompilacji informacje.
Z pomocą menadżera łatwo można modyfikować zawartość i
strukturę projektu.
Narzędzia dodatkowe
służą do tworzenia:
systemu pomocy,
ikon i kursorów,
programów instalacyjnych,
itp.
2010-05-17
22
Narzędzia dodatkowe
System pomocy
służy do uzyskiwania informacji o:
środowisku programistycznym,
zasadach jego użytkowania,
elementach języka wraz z przykładami,
rodzaju licencji, autorach i kontaktach.
Dobrze zorganizowanie, obszerne systemy pomocy
zawierają często kompendium wiedzy na temat
danego języka programowania.
2010-05-17
23
System pomocy
Programowanie
Podejście strukturalne
Podejście obiektowe
2010-05-17
24
Podejście strukturalne
Algorytmy + struktury danych = programy
Podział algorytmu na operacje realizowane
za pomocą odrębnych procedur
Dane i procedury nie są ze sobą ściśle
związane.
Podejście obiektowe
Obiekty -
elementy łączące stan (czyli dane) i
zachowanie (czyli procedury, tu: metody).
Algorytm wyrażony jest jako zbiór obiektów,
komunikujących się pomiędzy sobą w celu
wykonywania zadań.
2010-05-17
25
Klasa
Klasa to w programowaniu obiektowym
częściowa lub całkowita definicja obiektów
mających wspólną strukturę i zachowanie
może także oznaczać zbiór wszystkich obiektów
tego samego typu
Modelowanie obiektów
rzeczywistych
2010-05-17
26
Klasa -
przykład
nazwa klasy
pola
metody
Obiekt
Jest egzemplarzem danej klasy
Ma stan pamiętany w polach
Ma określony zbiór operacji (metod)
Jest odróżnialny od innych obiektów
2010-05-17
27
Klasa i obiekty
Klasa Samochód
Obiekty klasy Samochód
Hermetyzacja (enkapsulacja)
ochrona przed bezpośrednim dostępem do
danych zawartych w obiekcie.
Do danych umieszczonych w obiektach danej
klasy należy się odwołać jedynie za
pośrednictwem metod tej klasy.
Dostęp do składowych klasy można
ograniczać specyfikatorami dostępu: private,
protected, public
2010-05-17
28
Hermetyzacja (enkapsulacja)
C zęść pryw atna
i chroniona
klasy/obiektu -
dane i m etody
C zęść publiczna
klasy/obiektu - m etody
Dziedziczenie
Utworzenie nowej klasy na podstawie już
istniejącej, poprzez
dodanie nowych pól i metod,
lub zmianę implementacji już istniejących metod.
związek między elementem ogólnym
(zwanym nadklasą lub przodkiem)
a pewnym specyficznym jego rodzajem
(zwanym podklasą lub potomkiem).
2010-05-17
29
Dziedziczenie (generalizacja)
Pojazd
Dziedziczenie
2010-05-17
30
Polimorfizm
Jeśli obiekt należy do pewnej klasy K,
to należy również do wszystkich nadklas
klasy K
Programowanie