Wstęp do Informatyki PASCAL - Katedra Informatyki > Home
Transkrypt
Wstęp do Informatyki PASCAL - Katedra Informatyki > Home
Wstęp do Informatyki Programowanie komputerów PC c.d. Cezary Bolek [email protected] Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki PASCAL - struktura blokowa programu Język PASCAL ma strukturę blokową, tzn. dopuszcza zagnieŜdŜanie funkcji i procedur Program główny Funkcja II poziomu Funkcja I poziomu Procedura I poziomu Procedura II poziomu Funkcja II poziomu Procedura III poziomu Wstęp do Informatyki Zasięg zmiennych [email protected] Przesłanianie zmiennych Język PASCAL ma klarowne reguły zasięgu zmiennych, związaną z jego strukturą blokową VAR X : real; VAR Y : real; X – zmienna OK (globalna) Y – zmienna OK (lokalna) X – zmienna OK (globalna) Y – ??? X – zmienna OK (globalna) Y – ??? X – zmienna OK (globalna/lokalna) Y – ??? Wstęp do Informatyki Zasięg zmiennej (identyfikatora) oznacza fragment programu, w którym moŜna uŜywać tę zmienną i oznacza ona tę samą zmienną Zasięg zmiennej w PASCALU obejmuje blok, w którym tę zmienną zadeklarowano oraz wszystkie bloki w nim zagnieŜdŜone. Zmienne globalne to zmienne zadeklarowane w bloku głównym programu, gdyŜ są widoczne we wszystkich blokach. Zmienne lokalne to zmienne zadeklarowane w danym bloku, ale nie widoczne na zewnątrz tego bloku. [email protected] VAR X : real; VAR X : real; Jeśli zmienna lokalna ma taką samą nazwę jak zmienna w bloku zewnętrznym, to zmienna zewnętrzna jest przesłonięta przez zmienną lokalną. X – zmienna OK (lokalna) Na zewnątrz tego bloku nadal widoczna jest zmienna zewnętrzna. X – zmienna OK (globalna) X – zmienna OK (globalna) X – zmienna OK (globalna/lokalna) Wstęp do Informatyki [email protected] 1 Zasięg zmiennych a przekazywanie parametrów Zasięgi - przykład PROGRAM scope(input,output); VAR a,b,c : integer; PROCEDURE aa(var a,b: integer); BEGIN a:=2; b:=b-1; END; Program moŜe komunikować się z wywołanymi procedurami i funkcjami: • poprzez parametry – gdy trzeba przekazywać róŜne zmienne lub wartości, poprawia to równieŜ czytelność procedur i funkcji, gdyŜ posiadają one jasno zapisany interfejs komunikacji. PROCEDURE bb(var c: integer); BEGIN c:=c+a; END; • poprzez zmienne globalne – gdy dotyczy to zmiennych szczególnie waŜnych w obrębie całego programu lub gdy dotyczy to duŜych rozmiarowo struktur danych, ale ogólnie zmniejsza czytelność programu. BEGIN a:=1; aa(b,a); aa(c,b); bb(b); writeln(a, b, c); END. Poprawna organizacja wymiany informacji pomiędzy blokami programu jest kwestią kompromisu i stylu programowania. Wstęp do Informatyki [email protected] IDE – zintegrowane środowisko programistyczne Rekurencja - przykład PROGRAM silnia(input,output); VAR n: integer; s: integer; Funkcja silnia jest wykorzystywana do rekurencyjnego obliczania wartości silni z n FUNCTION sil(x: integer): integer; BEGIN IF x=0 THEN sil:=1 ELSE sil:=x*sil(x-1); END; Integrated Develpement Environment (IDE) edytor + syntax highlighting, bracket matching, macros kompilator debugger n!=n*(n-1)*(n-2)...*1= n*(n-1)! Rekurencja polega na moŜliwości wywoływania funkcji przez samą siebie, oczywiście z innymi parametrami BEGIN write(‘Podaj n=‘); read(n); s:=sil(n); writeln(‘Silnia wynosi =‘,s); END. Wstęp do Informatyki [email protected] [email protected] ! Uwaga program liczy poprawnie silnię jedynie dla małych wartości n. Dlaczego? FreePascal IDE Wstęp do Informatyki Jakie liczby wydrukuje ten program ??? Wstęp do Informatyki [email protected] 2 Konstrukcje sterujące - C Język C C: Sekwencja (grupowanie): { ... } Selekcja IF-ELSE: { if (wyraŜenie) instrukcja1 else instrukcja2; instrukcja; instrukcja; ... instrukcja; 1972, Bell Laboratories, USA, Dennis Ritchie („Język C”, Brian Kerninghan Dennis Ritchie, WNT, kilka wydań od 1978r) język „stworzony dla programistów, przez programistów”: system UNIX zwięzła i prosta składnia – szybka kompilacja i efektywny kod maszynowy (wyraŜenie zwraca wartość numeryczna: 0 – oznacza niespełnienie warunku ≠0 – oznacza spełnienie warunku) } zróŜnicowane i efektywne konstrukcje sterujące Selekcja + grupowanie : brak procedur: tylko funkcje T operacje na wskaźnikach silny nacisk na separacje modułów: zmienne lokalne s1 bardzo bogaty (z konieczności) zestaw procedur bibliotecznych s2 wyr N if (wyr) { s1; s2; } else s3; s3 podstawa dla współczesnych języków obiektowych: C++, Java, C# Wstęp do Informatyki [email protected] Konstrukcje sterujące - C Istnieją równieŜ konstrukcja typu: Wstęp do Informatyki [email protected] Dla kaŜdej zadeklarowanej zmiennej w programie, kompilator przydziela miejsce w pamięci, gdzie przechowywana jest jej wartość np. int x=0; /* deklaracje zmiennej x o wartości 0 */ Cykle: while (wyraŜenie) instrukcja; do instrukcja while (wyraŜenie); for (wyr1; wyr2; wyr3) instrukcja; Selekcja wielokrotna switch (wyraŜenie) { case wartość_1 : instrukcja_1; case wartość_2 : instrukcja_2; ... case wartość_n : instrukcja_n; } Wskaźniki w C W języku C moŜna deklarować zmienne wskaźnikowe, tj. takie, których wartościami są wskazania (lokalizacja) innych obiektów w pamięci operacyjnej komputera int *w; Wskaźniki mogą wskazywać inne zmienne: Pamięć (adresy) 100 101 102 103 104 105 106 107 108 109 10A 0 x 103 w w = &x; /* operator & zwraca lokalizację x */ Za pomocą wskaźników moŜna odwoływać się do wskazywanej zmiennej. W poniŜszych dwóch liniach wykonywana jest ta sama operacja zmiany wartości zmiennej x: x = 2; /* przypisanie wartości 2 do zmiennej x */ *w = 2; /* operator * oznacza odwołanie do wskazywanego obiektu*/ Wstęp do Informatyki [email protected] Wstęp do Informatyki [email protected] 3 C - struktura programu C - Zasięg zmiennych Język C nie dopuszcza zagnieŜdŜania funkcji Język C charakteryzuje się silną hermetyzacją poszczególnych modułów programowych int X; Funkcja X – zmienna OK (globalna) Y – ??? Funkcja int X,Y; X – zmienna OK (lokalna) Y – zmienna OK (lokalna) int Y; Program główny Wstęp do Informatyki Wstęp do Informatyki C - przekazywanie parametrów Przekazywanie parametrów moŜliwe jest tylko: przez wartość – funkcja otrzymuje kopie wartości zmiennych i nie moŜe zmienić wartości oryginalnej zmiennej ! PoniewaŜ istnieją zmienne typu wskaźnikowego, które teŜ mogą być przekazywane do funkcji, moŜliwe jest odwoływanie się funkcji do zmiennych z zewnątrz. int zero( int x) { x = 0; ... } int zero( int *x) { *x = 0; ... } ... zero(a); ... ... w=&a; zero(w); ... Wstęp do Informatyki Zmienne globalne to zmienne zadeklarowane poza głównym blokiem programu Zmienne lokalne to zmienne zadeklarowane w danym bloku, ale nie widoczne na zewnątrz tego bloku. X – zmienna OK (globalna) Y – zmienna OK (lokalna) [email protected] funkcja zero nie zmienia wartości zmiennej a, Zasięg zmiennej w C obejmuje tylko blok, w którym tę zmienną zadeklarowano. [email protected] funkcja zero zmienia (!!!) wartość zmiennej a, gdyŜ funkcja otrzymała wskaźnik (lokalizację) do tej zmiennej [email protected] Język C - podsumowanie Bardzo efektywny proces kompilacji i kod maszynowy Zwięzła składnia - efektywny zapis programu Łatwość odwoływania się do zasobów komputera Uniwersalność – język tworzenia większości oprogramowania na świecie (w swojej podstawowej i obiektowej odmianie) Konieczność rozumienia podstaw architektury komputera Zwięzła składnia – zawiły i trudny do zrozumienia program Bezpłatny kompilator + IDE: www.bloodshed.net Wstęp do Informatyki [email protected] 4 Programowanie proceduralne Programowanie obiektowe Programowanie obiektowe polega na integracji struktur danych i funkcji które na nich operują. Programowanie proceduralne polega na tworzeniu programów w postaci modułowej (Pascal, C), gdzie oddzielnie deklarowane są struktury danych (proste i złoŜone) oddzielnie deklarowane są moduły programowe (funkcje, procedury) moduły programu komunikują się, przekazując sobie dane poprzez parametry podczas wywołania Programowanie proceduralne daje dobre efekty dla programów o średnim stopniu komplikacji (popularne do połowy lat 80’tych, zanim pojawiło się oprogramowanie dla środowisk graficznych). Wzrost rozmiaru programu (tysiące linii kodu programu i więcej), zwiększenie liczby struktur danych i komplikacja wzajemnych zaleŜności danych i modułów powoduje, Ŝe programowanie proceduralne staje się nieefektywne. Wstęp do Informatyki Programowanie obiektowe bardzo dobrze sprawdza się w programach, które operują na złoŜonych obiektach (np. elementy środowiska graficznego: okna, menu, przyciski, ikony, etc.). Idea obiektowości jest bliska postrzeganiu świata przez człowieka, w którym obiekty mają własne cechy i mogą wykonywać specyficzne tylko dla nich czynności: pies: kolor, waga, wiek; szczeka, biega, gryzie, ... konto bankowe: stan, waluta; wpłata, wypłata, odsetki,... Wstęp do Informatyki [email protected] Przykład - Java [email protected] Języki skryptowe class Pomieszczenie { private int szer; int dlug, szer, wys; Pomieszczenie(int s, int d, int w) { szer = s; dlug = d; wys = w; } int podloga() { return szer * dlug; } Deklaracja typu danych (klasy) opisującej pomieszczenie. KaŜde pomieszczenie ma swoje dane: dlug, szer, wys oraz swoje operacje: obliczenie powierzchni podłogi i powierzchni ścian int sciana() { return 2*(szer*wys + dlug*wys); } ... Pomieszczenie pokoj = new Pomieszczenie(3, 4, 2); Pomieszczenie kuchnia = new Pomieszczenie(2, 3, 2); deklaracja dwóch obiektów klasy Pomieszczenie int powierz; int sciany; powierz=pokoj.podloga() + kuchnia.podloga(); sciany =pokoj.sciana() + kuchnia.sciana(); ... [email protected] Wzrost szybkości przetwarzania komputerów powoduje coraz większą popularność nowoczesnych języków interpretowanych, ukierunkowanych na specyficzne zastosowania: przetwarzanie tekstów administracja systemami operacyjnymi organizacja wymiany informacji między aplikacjami tworzenie oprogramowania prototypowego Cechy współczesnych języków skryptowych: } Wstęp do Informatyki • W językach obiektowych (C++, Java) deklaruje się razem struktury danych zwane obiektami i operacje, które moŜna wykonać na tych obiektach. • Dzięki temu zabiegowi, programista nie musi juŜ pamiętać szczegółów stosowania wszystkich funkcji w programie i moŜe posługiwać się złoŜonymi strukturami danych. odwołanie do obiektów i wykonania na nich operacji interpretowany sposób wykonywania wysoki poziom abstrakcji danych (struktury asocjacyjne, czasem nawet brak podziału danych na typy) instrukcje bardzo wysokiego poziomu wysokospecjalizowane funkcje przetwarzania danych łatwość modyfikacji i dostosowania kodu do szybko zmieniających się wymagań niezaleŜność od systemu operacyjnego (przenośność) Wstęp do Informatyki [email protected] 5 Perl Tcl/Tk (Practical Extraction and Report Language) (Tool Command Language) Perl - język ukierunkowany na wykonywanie zadań uŜytkowych które: 1) moŜna i trzeba zautomatyzować, 2) wymagają częstej modyfikacji swego działania 3) polegają na efektywnym łączeniu wyników pracy innych programów Brak konieczności deklarowania zmiennych ZłoŜone struktury danych: elastyczny dostęp, brak ograniczeń rozmiaru Bogactwo konstrukcji sterujących: if, unless, while, until, for, foreach MoŜliwości programowania proceduralnego i obiektowego Mnogość specjalizowanych funkcji bibliotecznych realizujących prosty dostęp do zaawansowanych funkcji systemu operacyjnego Dostępny dla wszystkich (popularnych) systemów operacyjnych Bezpłatny !!! Biblioteki Perla (oprócz operacji standardowych): operacje na plikach, interfejsy baz danych, zaawansowane przetwarzanie tekstu, zarządzanie procesami, archiwizacja, kompresja, szyfrowanie, przetwarzanie obrazów, programowanie sieciowe, tekstowe i graficzne interfejsy uŜytkownika, ... Tcl/Tk - język ukierunkowany na wykonanie 1) aplikacji stanowiących interfejs do oprogramowania 2) aplikacji łączących wyniki działania róŜnych programów 3) prototypowych (szybkich) rozwiązań oprogramowania i interfejsów graficznych Nietypowa składnia oparta na substytucji poleceń i zmiennych Brak deklarowania zmiennych, brak typów zmiennych ZłoŜone struktury danych i bogactwo konstrukcji sterujących Mnogość specjalizowanych funkcji bibliotecznych realizujących prosty dostęp do zaawansowanych funkcji systemu operacyjnego Ukierunkowanie na tworzenie interfejsu interfejsu uŜytkownika Dostępny dla wszystkich (popularnych) systemów operacyjnych Bezpłatny !!! www.tcl.tk www.perl.com/perl, www.perl.org Wstęp do Informatyki Wstęp do Informatyki [email protected] [email protected] Tcl/Tk - przykłady Tcl/Tk - porównanie Liczba instrukcji języka maszynowego na jedną instrukcję danego języka button .hello -text "Hello World" -command exit pack .hello Wstęp do Informatyki scale .s -from 0 -to 100 -orient horizontal -showvalue true \ -label Temperature -tickinterval 25 -length 300 \ -troughcolor red -relief raised pack .s 1000 Tcl/Tk Visual Basic 100 Java C++ 10 C 1 Assembler Ŝadne duŜe Wymaganie deklarowania typów danych [email protected] foreach color {white green red blue} { radiobutton .$color -text $color -variable dye -value $color pack .$color -side left .$color config -command {wm title . $dye} } menubutton .m1 -text File -menu .m1.file menubutton .m2 -text Edit -menu .m2.help frame .l -width 150 -height 50 -bg yellow pack .l -side bottom pack .m1 .m2 -side left menu .m1.file -tearoff false .m1.file add command -label New -command {puts "New"} .m1.file add command -label Open -command {puts "Open"} .m1.file add command -label Save -command {puts "Save"} .m1.file add command -label Exit -command {puts "Exit"} menu .m2.help -tearoff false .m2.help add command -label Help -command {puts "Help"} Wstęp do Informatyki [email protected] 6