O (o)programowaniu R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski www.il.pw.edu.pl/~rg s-rg@siwy.il.pw.edu.pl
Próba klasyfikacji Nie jest możliwa jednoznaczna klasyfikacja oprogramowania! Oto jedna z wielu subiektywnych prób:! systemy operacyjne,! oprogramowanie narzędziowe,! języki programowania,! programy aplikacyjne. 2 10
Systemy operacyjne Systemy operacyjne (dla komputerów PC)! DOS! Windows 95, 98, Millenium! Windows NT, 2000, XP! OS/2! Linux 3 10
Oprogramowanie narzędziowe Oprogramowanie narzędziowe staje się coraz częściej składową systemu operacyjnego Oprogramowanie narzędziowe! 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. 4 10
Generacje języków (1) Języki programowania są to (w pewnym uproszczeniu) narzędzia, które umożliwiają tworzenie nowych programów.! 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. 5 10
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ą! " 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++ 6 10
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ą:! 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. 7 10
Algorytm 8 10 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! dla programisty (zapis konkretnego algorytmu w określonej notacji)! dla komputera (ciąg rozkazów zrozumiałych przez procesor).
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
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.! tłumaczenia tego dokonuje program zwany kompilatorem;! istnieją kompilatory jednoprzebiegowe i wieloprzebiegowe. 10 10
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.! Zapewnia ona większa elastyczność, jest jednak procesem wielokrotnie wolniejszym. 11 10
Programowanie Podstawowym celem każdego języka programowania jest pomoc w budowie programu (programowaniu) w sferze:! 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). 12 10
Implementacja komputerowa Problem implementacji komputerowej łączy się z następującymi sprawami:! 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). 13 10
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.! reguły semantyczne języka definiują zbiór programów poprawnych semantycznie, a także błędy semantyczne. 14 10
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:! stałym (od określonej kolumny, odstępy nie mają znaczenia!!!! swobodnym (odstępy są istotnym elementem). 15 10
Zakończenie programu Rozróżnia się trzy warianty zakończenia działania programu:! poprawne zakończenie! przerwanie wykonywania na skutek błędu,! proces nieskończony. 16 10
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:! 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. 17 10
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
Języki programowania (1) 19 10 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.! Stworzony został do przetwarzania dużej liczby danych.
Języki programowania (2) 20 10 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! łączy ze sobą właściwości asemblerów i dobre cechy języków wysokiego poziomu
Uczenie się języków Uczenie się i poznawanie języka programowania może się odbywać w jeden z przeciwstawnych sposobów:! 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. 21 10
Definicje języków Istnieje naturalna konieczność tworzenia kompletnych definicji języków programowania zawierających omówienie ich wszystkich szczegółów.! 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). 22 10
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
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;! wiele z gier to odpowiedniki symulatorów, profesjonalnych narzędzi do szkolenia pilotów. 24 10