O (o)programowaniu

Transkrypt

O (o)programowaniu
O (o)programowaniu
R. Robert Gajewski
omklnx.il.pw.edu.pl/~rgajewski
www.il.pw.edu.pl/~rg
[email protected]
Próba klasyfikacji
Nie jest możliwa jednoznaczna klasyfikacja
oprogramowania!
Oto jedna z wielu subiektywnych prób:
!
!
!
!
2•10
systemy operacyjne,
oprogramowanie narzędziowe,
języki programowania,
programy aplikacyjne.
© 2004, R. Robert Gajewski
Systemy operacyjne
Systemy operacyjne (dla komputerów PC)
!
!
!
!
!
3•10
DOS
Windows ’95, ’98, Millenium
Windows NT, 2000, XP
OS/2
Linux
© 2004, R. Robert Gajewski
Oprogramowanie narzędziowe
Oprogramowanie narzędziowe staje się coraz
częściej składową systemu operacyjnego
Oprogramowanie narzędziowe
!
!
4•10
nakładki na system operacyjny ułatwiające niezbyt
wprawnym użytkownikom posługiwanie się
komputerem
bardziej zaawansowane programy służące
zaawansowanym użytkownikom do szczegółowej
diagnostyki sprzętu.
© 2004, R. Robert Gajewski
Generacje języków (1)
Języki programowania są to (w pewnym
uproszczeniu) narzędzia, które umożliwiają
tworzenie nowych programów.
!
!
5•10
I generacja - języki poziomu maszynowego (MLL,
Machine Level Languages) powstały wraz z
narodzinami pierwszych komputerów; wymagały od
programistów pracy na poziomie pojedynczych bitów.
II generacja - języki symboliczne określane mianem
języków niskiego poziomu (Intermediate Level
Languages) powstały jako ułatwienie pracy
programisty; są one nadal językami zorientowanymi
maszynowo, ich używanie jest już jednak znacznie
prostsze.
© 2004, R. Robert Gajewski
Generacje języków (1)
!
!
III generacja - języki wysokiego poziomu (High
Level Languages) są to języki ogólnego przeznaczenia
o dużym stopniu uniwersalności; ich rozwój
ewoluował w kierunku języków problemowo
zorientowanych.
IV generacja - użytkownik komputera czasami jest
też programistą!
"
"
"
"
!
6•10
języki arkuszy kalkulacyjnych,
systemy zarządzania bazami danych,
systemy graficzne
systemy ekspertowe i oprogramowanie zintegrowane
V generacja: wizualny (graficzny) interfejs, by
stworzyć kod źródłowy, kompilowany zwykle
kompilatorem języka 3. czy 4. generacji: VisualAge
for Java, Visual C++
© 2004, R. Robert Gajewski
Rozwiązanie zadania
Celem wielu działań jest „rozwiązanie zadania”.
Na proces ten składa się wiele różnych
powiązanych ze sobą pojęć takich jak:
!
!
!
!
metoda, która będzie stosowana,
plan stosowania tej metody w konkretnym zadaniu,
opis czynności wykonywanych podczas realizacji
planu,
wynik końcowy wykonywanych czynności .
Dodatkowymi istotnymi elementami rozwiązania
zadania są:
!
!
7•10
dowód poprawności zbudowanego rozwiązania
(zarówno każdego kroku z osobna, jak i też kroków
wykonywanych w określonym porządku),
stwierdzenie jednoznaczności rozwiązania.
© 2004, R. Robert Gajewski
Algorytm
W każdym przepisie możemy wyróżnić:
!
!
opis obiektów (prostych i złożonych)
opis czynności prostych i złożonych, które możemy
rozpisać na proste.
Algorytm to opis obiektów łącznie z opisem
czynności, które należy wykonać z tymi
obiektami aby osiągnąć określony cel.
Każdy algorytm powinien być zapisany w notacji
zrozumiałej
!
!
8•10
dla programisty (zapis konkretnego algorytmu w
określonej notacji)
dla komputera (ciąg rozkazów zrozumiałych przez
procesor).
© 2004, R. Robert Gajewski
Język programowania
Oba te wymogi reprezentują dwa przeciwstawne
bieguny:
to co jest zrozumiałe dla programisty jest nieczytelne
dla procesora
! ciągi rozkazów procesora są zrozumiałe jedynie dla
bardzo wprawnych programistów.
Język programowania jest zbiorem odpowiednich
konwencji umożliwiających komunikatywność algorytmu.
!
Algorytm wyrażony w języku programowania to
program.
Implementacja to realizacja języka programowania dla
określonego komputera lub systemu operacyjnego.
9•10
© 2004, R. Robert Gajewski
Translacja: kompilacja
Proces tłumaczenia (translacji) programu może
przyjąć postać:
!
!
kompilacji
interpretacji.
Kompilacja to proces tłumaczenia programu
źródłowego napisanego w języku
programowania na równoważny mu program
(kod) wynikowy w języku maszynowym
maszyny docelowej, na której będzie on
wykonywany.
!
!
10•10
tłumaczenia tego dokonuje program zwany
kompilatorem;
istnieją kompilatory jednoprzebiegowe i
wieloprzebiegowe.
© 2004, R. Robert Gajewski
Translacja: kompilacja
Proces tłumaczenia (translacji) programu może
przyjąć postać:
!
!
kompilacji
interpretacji.
Interpretacja polega na wykonywaniu
programu źródłowego przez interpreter linia po
linii.
!
Nie jest on nigdy tłumaczony w całości.
Czysta interpretacja jest procesem
jednostopniowym.
!
11•10
Zapewnia ona większa elastyczność, jest jednak
procesem wielokrotnie wolniejszym.
© 2004, R. Robert Gajewski
Programowanie
Podstawowym celem każdego języka
programowania jest pomoc w budowie
programu (programowaniu) w sferze:
!
!
!
12•10
projektowania programu (zakres programu,
specyfikacja danych);
przejrzystości (wyrażanie akcji w sposób
zrozumiały); dokumentacja powinna być integralną
częścią procesu programowania; program powinien
być zapisany czytelnie, aby umożliwić jego
konserwację i dokonywanie w nim poprawek i
rozszerzeń;
weryfikacji (łatwość określania poprawności i
testowania).
© 2004, R. Robert Gajewski
Implementacja komputerowa
Problem implementacji komputerowej łączy się z
następującymi sprawami:
!
!
!
!
13•10
dostępnością (dla jakich maszyn i systemów
operacyjnych istnieją kompilatory danego języka);
bibliotekami (czy istnieje wsparcie w postaci
gotowych podprogramów);
efektywnością (czy kompilator działa szybko i czy
produkuje efektywny kod wynikowy);
dokumentacją (czy istnieje precyzyjny opis lub
norma języka i dokumentacja kompilatora).
© 2004, R. Robert Gajewski
Syntaktyka i semantyka
Syntaktyka języka programowania (składnia)
zajmuje się formą pisania programów i jest
zbiorem reguł, które definiują sposób
konstruowania łańcuchów symboli.
!
dopuszczalne zbiory łańcuchów nazywamy
programami poprawnymi syntaktycznie.
Semantyka zajmuje się znaczeniem
programów, czyli tym, co się się dzieje podczas
wykonywania programów.
!
14•10
reguły semantyczne języka definiują zbiór
programów poprawnych semantycznie, a także błędy
semantyczne.
© 2004, R. Robert Gajewski
Syntaktyka ~ semantyka
Ciąg znaków (instrukcji, zdań) poprawny
składniowo (syntaktycznie) może się okazać
błędny semantycznie (jest to widoczne podczas
wykonywania programu).
Granica pomiędzy składnią a semantyka nie jest
ściśle i jednoznacznie zdefiniowana.
Treść programu może być pisana w formatach:
!
!
15•10
stałym (od określonej kolumny, odstępy nie mają
znaczenia!!!
swobodnym (odstępy są istotnym elementem).
© 2004, R. Robert Gajewski
Zakończenie programu
Rozróżnia się trzy warianty zakończenia działania
programu:
!
!
!
16•10
poprawne zakończenie
przerwanie wykonywania na skutek błędu,
proces nieskończony.
© 2004, R. Robert Gajewski
Komentarze
Dla uzyskania komunikatywnego przedstawienia
algorytmów programista musi mieć możliwość
robienia bezpośrednio w programie adnotacji
(komentarzy).
Możliwe są różne konwencje pisania w
programie komentarzy:
!
!
!
17•10
rozpoczęcie komentarza w z góry zadanej kolumnie obejmuje on wówczas wszystkie znaki do końca
wiersza;
użycie specjalnego symbolu, oznaczającego, że wiersz
jest komentarzem;
rozpoczęcie i kończenie komentarza symbolami
specjalnymi.
© 2004, R. Robert Gajewski
Historia programowania
Do 1954 większość programów pisano w języku
maszynowym.
W następnych latach kody operacji zastąpiono
nazwami mnemotechnicznymi (mnożenie
MPY - MultiPlY).
Kolejny etap to zastąpienia nazwami wartości
adresów. Tak napisane w postaci
symbolicznej programy były tłumaczone na
język maszynowy za pomocą programu
zwanego asemblerem.
Pisanie programów w języku maszynowym lub
symbolicznym określa się mianem kodowania.
To co robimy współcześnie (programowanie)
obejmuje dodatkowo konstrukcję algorytmu.
18•10
© 2004, R. Robert Gajewski
Języki programowania (1)
Praojcem języków programowania wysokiego
poziomu był język Plankakul
(1945, Konrad Zuse).
Twórca pierwszego kompilatora –
(1952 Grace Hopper).
FORTRAN (FORmula TRANslation) został
opracowany w latach 1954-57 przez Backhusa i
jego grupę.
!
Jego celem było automatyczne tłumaczenie różnych
wzorów matematycznych.
COBOL (Common Business Oriented Language)
to język programowania rozwiązujący problemy
z rachunkowości i ekonomii.
!
19•10
Stworzony został do przetwarzania dużej liczby
danych.
© 2004, R. Robert Gajewski
Języki programowania (2)
Algol (ALGOrythmic Language, ALGEbraic
Oriented Language) powstał jako wspólne dzieło
Wirtha i Hoare na gruncie pewnych idei
FORTRANU;
!
przeznaczony jest również do obliczeń numerycznych,
ale jego możliwości są szersze
BASIC (Beginner’s All-purpose Symbolic
Instruction Code)
!
jest uniwersalnym językiem programowania dla
początkujących
Pascal został stworzony przez Wirtha w 1969
na gruncie pewnych idei Algolu
!
jest językiem zwięzłym o przejrzystej gramatyce
C (1972), którego twórcą jest Ritchie
!
20•10
łączy ze sobą właściwości asemblerów i dobre cechy
języków wysokiego poziomu
© 2004, R. Robert Gajewski
Uczenie się języków
Uczenie się i poznawanie języka programowania
może się odbywać w jeden z przeciwstawnych
sposobów:
!
!
21•10
podejście syntetyczne (bottom-up), od podstaw;
rozpoczyna się od pojęć podstawowych, takich jak
typy, identyfikatory, liczby;
podejście analityczne (top-down) rozpoczyna się
od konstrukcji najwyższego poziomu (np. programu);
posługując się często nie zdefiniowanymi
konstrukcjami pozwala na szybsze zrozumienie
języka.
© 2004, R. Robert Gajewski
Definicje języków
Istnieje naturalna konieczność tworzenia
kompletnych definicji języków programowania
zawierających omówienie ich wszystkich
szczegółów.
!
!
!
!
22•10
kompletność (odpowiedź na każde pytanie dot.
składni i semantyki);
przejrzystość (do łatwego zrozumienia każdej
definicji powinna być potrzebna minimalna liczba
elementów);
zwięzłość (możliwość zwartego zapisu);
naturalność (ważniejsza chyba od zwięzłości);
realizm (liczenie się z ograniczeniami konkretnej
implementacji).
© 2004, R. Robert Gajewski
Programy aplikacyjne (1)
edytory - służą do redagowania tekstów o
nieskomplikowanej budowie;
procesory tekstu - to bardziej zaawansowane
edytory dające więcej możliwości
profesjonalnego opracowywania tekstów.
programy małej poligrafii (DTP, DeskTop
Publishing) są w pełni profesjonalnymi
narzędziami służącymi do składu tekstu i grafiki.
zintegrowane pakiety biurowe (MS Office…)
- służą do automatyzacji prac biurowych:
korespondencja, obliczenia tabelaryczne,
kartoteki i bazy danych, grafika prezentacyjna;
23•10
© 2004, R. Robert Gajewski
Programy użytkowe (2)
programy i biblioteki matematyczne - służą
do automatyzacji wielu obliczeń
matematycznych;
!
stanowią pomoc przy… projektowaniu!
programy wspomagające pracę inżyniera
(CAD/CAE/CAM) - mogą się różnić zależnie od
poszczególnych dyscyplin inżynierskich;
pakiety graficzne - charakter zbliżony do CAD
i DTP
programy edukacyjne - multimedia!!!
gry - mogą mieć charakter edukacyjny;
!
24•10
wiele z gier to odpowiedniki symulatorów,
profesjonalnych narzędzi do szkolenia pilotów.
© 2004, R. Robert Gajewski