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