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 [email protected] Zasięg 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] 1 Przesłanianie zmiennych 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] Zasięg zmiennych a przekazywanie parametrów 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. • 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. Poprawna organizacja wymiany informacji pomiędzy blokami programu jest kwestią kompromisu i stylu programowania. Wstęp do Informatyki [email protected] 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; PROCEDURE bb(var c: integer); BEGIN c:=c+a; END; BEGIN a:=1; aa(b,a); aa(c,b); bb(b); writeln(a, b, c); END. Wstęp do Informatyki Jakie liczby wydrukuje ten program ??? [email protected] 2 Rekurencja - przykład silnia jest wykorzystywana do PROGRAM silnia(input,output); Funkcja rekurencyjnego obliczania wartości silni z n VAR n!=n*(n-1)*(n-2)...*1= n*(n-1)! n: integer; s: integer; FUNCTION sil(x: integer): integer; BEGIN IF x=0 THEN sil:=1 ELSE sil:=x*sil(x-1); END; 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 ! Uwaga program liczy poprawnie silnię jedynie dla małych wartości n. Dlaczego? [email protected] IDE – zintegrowane środowisko programistyczne FreePascal IDE Integrated Develpement Environment (IDE) edytor + syntax highlighting, bracket matching, macros kompilator debugger Wstęp do Informatyki [email protected] Język C C: 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 zróŜnicowane i efektywne konstrukcje sterujące brak procedur: tylko funkcje operacje na wskaźnikach silny nacisk na separacje modułów: zmienne lokalne bardzo bogaty (z konieczności) zestaw procedur bibliotecznych podstawa dla współczesnych języków obiektowych: C++, Java, C# Wstęp do Informatyki [email protected] 3 Konstrukcje sterujące - C Sekwencja (grupowanie): { ... } Selekcja IF-ELSE: { if (wyraŜenie) instrukcja1 else instrukcja2; instrukcja; instrukcja; ... instrukcja; (wyraŜenie zwraca wartość numeryczna: 0 – oznacza niespełnienie warunku } ≠0 – oznacza spełnienie warunku) Selekcja + grupowanie : T wyr N if (wyr) { s1; s2; } else s3; s1 s3 s2 Wstęp do Informatyki [email protected] Konstrukcje sterujące - C Istnieją równieŜ konstrukcja typu: 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; } Wstęp do Informatyki [email protected] Dla kaŜdej zadeklarowanej zmiennej w programie, kompilator przydziela miejsce w pamięci, gdzie przechowywana jest jej wartość Wskaźniki w C Pamięć (adresy) 100 101 np. int x=0; /* deklaracje zmiennej x o wartości 0 */ 102 103 104 W języku C moŜna deklarować zmienne wskaźnikowe, tj. takie, których wartościami są wskazania (lokalizacja) 105 innych obiektów w pamięci operacyjnej komputera 106 107 int *w; 108 109 Wskaźniki mogą wskazywać inne zmienne: 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] 4 C - struktura programu Język C nie dopuszcza zagnieŜdŜania funkcji Funkcja Funkcja Program główny Wstęp do Informatyki [email protected] C - Zasięg zmiennych Język C charakteryzuje się silną hermetyzacją poszczególnych modułów programowych int X; X – zmienna OK (globalna) Y – ??? int X,Y; X – zmienna OK (lokalna) Y – zmienna OK (lokalna) Zasięg zmiennej w C obejmuje tylko blok, w którym tę zmienną zadeklarowano. 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. int Y; X – zmienna OK (globalna) Y – zmienna OK (lokalna) Wstęp do Informatyki [email protected] 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 funkcja zero nie zmienia wartości zmiennej a, funkcja zero zmienia (!!!) wartość zmiennej a, gdyŜ funkcja otrzymała wskaźnik (lokalizację) do tej zmiennej [email protected] 5 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] Programowanie proceduralne 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 [email protected] Programowanie obiektowe Programowanie obiektowe polega na integracji struktur danych i funkcji które na nich operują. • 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. 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] 6 Przykład - Java class Pomieszczenie { private int szer; int dlug, szer, wys; Pomieszczenie(int s, int d, int w) { szer = s; dlug = d; wys = w; } 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 podloga() { return szer * dlug; } 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(); ... Wstęp do Informatyki odwołanie do obiektów i wykonania na nich operacji [email protected] Języki skryptowe 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: 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] Perl (Practical Extraction and Report 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, ... www.perl.com/perl, www.perl.org Wstęp do Informatyki [email protected] 7 Tcl/Tk (Tool Command Language) 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 Wstęp do Informatyki [email protected] Liczba instrukcji języka maszynowego na jedną instrukcję danego języka Tcl/Tk - porównanie 1000 Tcl/Tk Visual Basic 100 Java C++ 10 C 1 Assembler Ŝadne duŜe Wymaganie deklarowania typów danych Wstęp do Informatyki [email protected] Tcl/Tk - przykłady button .hello -text "Hello World" -command exit pack .hello scale .s -from 0 -to 100 -orient horizontal -showvalue true \ -label Temperature -tickinterval 25 -length 300 \ -troughcolor red -relief raised pack .s 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] 8