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