O (o)programowaniu Próba klasyfikacji Systemy operacyjne
Transkrypt
O (o)programowaniu Próba klasyfikacji Systemy operacyjne
Próba klasyfikacji Nie jest możliwa jednoznaczna klasyfikacja oprogramowania! O (o)programowaniu Oto jedna z wielu subiektywnych prób: R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski www.il.pw.edu.pl/~rg [email protected] ! ! ! ! systemy operacyjne, oprogramowanie narzędziowe, języki programowania, programy aplikacyjne. 2•10 Systemy operacyjne Oprogramowanie narzędziowe Oprogramowanie narzędziowe staje się coraz częściej składową systemu operacyjnego Systemy operacyjne (dla komputerów PC) ! ! ! ! ! Oprogramowanie narzędziowe DOS Windows ’95, ’98, Millenium Windows NT, 2000, XP OS/2 Linux 3•10 ! ! © 2004, R. Robert Gajewski 5•10 © 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. ! 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) ! © 2004, R. Robert Gajewski ! 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 ! 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 Algorytm Celem wielu działań jest „rozwiązanie zadania”. Na proces ten składa się wiele różnych powiązanych ze sobą pojęć takich jak: ! ! ! ! W każdym przepisie możemy wyróżnić: ! ! 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 . Algorytm to opis obiektów łącznie z opisem czynności, które należy wykonać z tymi obiektami aby osiągnąć określony cel. Dodatkowymi istotnymi elementami rozwiązania zadania są: ! ! Każdy algorytm powinien być zapisany w notacji zrozumiałej 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 © 2004, R. Robert Gajewski ! ! Proces tłumaczenia (translacji) programu może przyjąć postać: 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. ! ! ! ! Implementacja to realizacja języka programowania dla określonego komputera lub systemu operacyjnego. © 2004, R. Robert Gajewski ! © 2004, R. Robert Gajewski Programowanie Proces tłumaczenia (translacji) programu może przyjąć postać: Podstawowym celem każdego języka programowania jest pomoc w budowie programu (programowaniu) w sferze: 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 tłumaczenia tego dokonuje program zwany kompilatorem; istnieją kompilatory jednoprzebiegowe i wieloprzebiegowe. 10•10 Translacja: kompilacja ! 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. Algorytm wyrażony w języku programowania to program. ! © 2004, R. Robert Gajewski Translacja: kompilacja Oba te wymogi reprezentują dwa przeciwstawne bieguny: ! dla programisty (zapis konkretnego algorytmu w określonej notacji) dla komputera (ciąg rozkazów zrozumiałych przez procesor). 8•10 Język programowania 9•10 opis obiektów (prostych i złożonych) opis czynności prostych i złożonych, które możemy rozpisać na proste. ! Zapewnia ona większa elastyczność, jest jednak procesem wielokrotnie wolniejszym. © 2004, R. Robert Gajewski 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 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. 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 © 2004, R. Robert Gajewski ! Semantyka zajmuje się znaczeniem programów, czyli tym, co się się dzieje podczas wykonywania programów. ! Rozróżnia się trzy warianty zakończenia działania programu: Granica pomiędzy składnią a semantyka nie jest ściśle i jednoznacznie zdefiniowana. ! ! Treść programu może być pisana w formatach: ! © 2004, R. Robert Gajewski 16•10 Komentarze 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. Możliwe są różne konwencje pisania w programie komentarzy: ! 17•10 © 2004, R. Robert Gajewski Historia programowania Dla uzyskania komunikatywnego przedstawienia algorytmów programista musi mieć możliwość robienia bezpośrednio w programie adnotacji (komentarzy). ! poprawne zakończenie przerwanie wykonywania na skutek błędu, proces nieskończony. stałym (od określonej kolumny, odstępy nie mają znaczenia!!! swobodnym (odstępy są istotnym elementem). 15•10 ! © 2004, R. Robert Gajewski Zakończenie programu Ciąg znaków (instrukcji, zdań) poprawny składniowo (syntaktycznie) może się okazać błędny semantycznie (jest to widoczne podczas wykonywania programu). ! reguły semantyczne języka definiują zbiór programów poprawnych semantycznie, a także błędy semantyczne. 14•10 Syntaktyka ~ semantyka ! dopuszczalne zbiory łańcuchów nazywamy programami poprawnymi syntaktycznie. 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 18•10 © 2004, R. Robert Gajewski Języki programowania (1) Języki programowania (2) Algol (ALGOrythmic Language, ALGEbraic Oriented Language) powstał jako wspólne dzieło 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ę. ! Wirtha i Hoare na gruncie pewnych idei FORTRANU; ! BASIC (Beginner’s All-purpose Symbolic Instruction Code) Jego celem było automatyczne tłumaczenie różnych wzorów matematycznych. ! ! © 2004, R. Robert Gajewski ! 20•10 Uczenie się języków ! 21•10 Istnieje naturalna konieczność tworzenia kompletnych definicji języków programowania zawierających omówienie ich wszystkich szczegółó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. © 2004, R. Robert Gajewski ! ! ! ! © 2004, R. Robert Gajewski Programy użytkowe (2) programy i biblioteki matematyczne - służą do automatyzacji wielu obliczeń matematycznych; 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; © 2004, R. Robert Gajewski 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) 23•10 łączy ze sobą właściwości asemblerów i dobre cechy języków wysokiego poziomu © 2004, R. Robert Gajewski Definicje języków Uczenie się i poznawanie języka programowania może się odbywać w jeden z przeciwstawnych sposobów: ! jest językiem zwięzłym o przejrzystej gramatyce C (1972), którego twórcą jest Ritchie Stworzony został do przetwarzania dużej liczby danych. 19•10 jest uniwersalnym językiem programowania dla początkujących Pascal został stworzony przez Wirtha w 1969 na gruncie pewnych idei Algolu COBOL (Common Business Oriented Language) to język programowania rozwiązujący problemy z rachunkowości i ekonomii. ! przeznaczony jest również do obliczeń numerycznych, ale jego możliwości są szersze ! 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