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