Wstęp do informatyki - Katedra Informatyki > Home

Transkrypt

Wstęp do informatyki - Katedra Informatyki > Home
PASCAL - struktura blokowa programu
Język PASCAL ma strukturę blokową, tzn. dopuszcza zagnieŜdŜanie funkcji i procedur
Program
główny
Wstęp do informatyki
Programowanie komputerów PC c.d.
Funkcja
II poziomu
Funkcja
I poziomu
Procedura
I poziomu
Cezary Bolek
[email protected]
Procedura
II poziomu
Funkcja
II poziomu
Uniwersytet Łódzki
Wydział Zarządzania
Procedura
III poziomu
Katedra Informatyki
Wstęp do informatyki
Zasięg zmiennych
Cezary Bolek <[email protected]>
2
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
VAR
X : real;
Zasięg zmiennej (identyfikatora)
oznacza fragment programu, w którym
moŜna uŜywać tę zmienną i oznacza
ona tę samą zmienną
VAR
X : real;
Zasięg zmiennej w PASCALU
obejmuje blok, w którym tę zmienną
zadeklarowano oraz wszystkie bloki
w nim zagnieŜdŜone.
X – zmienna OK (lokalna)
Na zewnątrz tego bloku nadal widoczna
jest zmienna zewnętrzna.
X – zmienna OK (globalna)
Zmienne globalne to zmienne
zadeklarowane w bloku głównym programu,
gdyŜ są widoczne we wszystkich blokach.
X – zmienna OK (globalna)
Zmienne lokalne to zmienne
zadeklarowane w danym bloku, ale
nie widoczne na zewnątrz tego bloku.
Cezary Bolek <[email protected]>
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 (globalna/lokalna)
3
Wstęp do informatyki
Cezary Bolek <[email protected]>
4
1
Zasięgi - przykład
Zasięg zmiennych a przekazywanie
parametrów
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.
Poprawna organizacja wymiany informacji pomiędzy blokami programu
jest kwestią kompromisu i stylu programowania.
Wstęp do informatyki
Cezary Bolek <[email protected]>
BEGIN
a:=1;
aa(b,a);
aa(c,b);
bb(b);
writeln(a, b, c);
END.
5
n!=n*(n-1)*(n-2)...*1= n*(n-1)!
FreePascal IDE
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
6
Integrated Develpement Environment (IDE)
edytor + syntax highlighting, bracket matching, macros
kompilator
debugger
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;
Cezary Bolek <[email protected]>
IDE – zintegrowane środowisko programistyczne
Rekurencja - przykład
PROGRAM silnia(input,output);
VAR
n: integer;
s: integer;
Wstęp do informatyki
Jakie liczby wydrukuje
ten program ???
! Uwaga program liczy
poprawnie silnię jedynie
dla małych wartości n.
Dlaczego?
Cezary Bolek <[email protected]>
7
Wstęp do informatyki
Cezary Bolek <[email protected]>
8
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
(wyraŜenie zwraca wartość numeryczna:
0 – oznacza niespełnienie warunku
≠0 – oznacza spełnienie warunku)
}
zwięzła i prosta składnia – szybka kompilacja i efektywny kod
maszynowy
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
s3
s2
podstawa dla współczesnych języków obiektowych: C++, Java, C#
Cezary Bolek <[email protected]>
N
s1
bardzo bogaty (z konieczności) zestaw procedur bibliotecznych
Wstęp do informatyki
wyr
9
Konstrukcje sterujące - C
Wstęp do informatyki
if (wyr)
{
s1;
s2;
}
else
s3;
Cezary Bolek <[email protected]>
Wskaźniki w C
Dla kaŜdej zadeklarowanej zmiennej
w programie, kompilator przydziela miejsce
w pamięci, gdzie przechowywana jest jej wartość
Istnieją równieŜ konstrukcja typu:
Pamięć (adresy)
np.
int x=0;
Cykle:
while (wyraŜenie) instrukcja;
do instrukcja while (wyraŜenie);
for (wyr1; wyr2; wyr3) instrukcja;
/* deklaracje zmiennej x o wartości 0 */
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
Selekcja wielokrotna
int *w;
switch (wyraŜenie)
{
case wartość_1 : instrukcja_1;
case wartość_2 : instrukcja_2;
...
case wartość_n : instrukcja_n;
}
Wskaźniki mogą wskazywać inne zmienne:
10
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
Cezary Bolek <[email protected]>
11
Wstęp do informatyki
Cezary Bolek <[email protected]>
12
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)
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;
Program
główny
Zasięg zmiennej w C obejmuje
tylko blok, w którym tę zmienną
zadeklarowano.
X – zmienna OK (globalna)
Y – zmienna OK (lokalna)
Wstęp do informatyki
Cezary Bolek <[email protected]>
13
Wstęp do informatyki
Cezary Bolek <[email protected]>
14
Język C - podsumowanie
C - przekazywanie parametrów
Bardzo efektywny proces kompilacji i kod maszynowy
Przekazywanie parametrów moŜliwe jest tylko:
przez wartość – funkcja otrzymuje kopie wartości zmiennych i nie
moŜe zmienić wartości oryginalnej zmiennej
Zwięzła składnia - efektywny zapis programu
Łatwość odwoływania się do zasobów komputera
! 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,
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
funkcja zero zmienia (!!!)
wartość zmiennej a,
gdyŜ funkcja otrzymała
wskaźnik (lokalizację)
do tej zmiennej
Cezary Bolek <[email protected]>
Bezpłatny kompilator + IDE: www.bloodshed.net
15
Wstęp do informatyki
Cezary Bolek <[email protected]>
16
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
• 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.
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).
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,...
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
Cezary Bolek <[email protected]>
17
Wstęp do informatyki
Przykład - Java
int podloga()
{
return szer * dlug;
}
Wzrost szybkości przetwarzania komputerów powoduje coraz większą
popularność nowoczesnych języków interpretowanych, ukierunkowanych
na specyficzne zastosowania:
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
przetwarzanie tekstów
administracja systemami operacyjnymi
organizacja wymiany informacji między aplikacjami
tworzenie oprogramowania prototypowego
Cechy współczesnych języków skryptowych:
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
18
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;
}
Cezary Bolek <[email protected]>
odwołanie do obiektów
i wykonania na nich operacji
Cezary Bolek <[email protected]>
19
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
Cezary Bolek <[email protected]>
20
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
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
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 !!!
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 !!!
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.tcl.tk
www.perl.com/perl, www.perl.org
Wstęp do informatyki
Cezary Bolek <[email protected]>
21
Wstęp do informatyki
Cezary Bolek <[email protected]>
22
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
1000
scale .s -from 0 -to 100 -orient horizontal -showvalue true \
-label Temperature -tickinterval 25 -length 300 \
-troughcolor red -relief raised
pack .s
Tcl/Tk
Visual Basic
100
foreach color {white green red blue} {
radiobutton .$color -text $color -variable dye -value $color
pack .$color -side left
.$color config -command {wm title . $dye}
}
Java
C++
10
C
1
Assembler
Ŝadne
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"}
duŜe
Wymaganie deklarowania
typów danych
Cezary Bolek <[email protected]>
23
Wstęp do informatyki
Cezary Bolek <[email protected]>
24
6

Podobne dokumenty