sadržaj (2) programiranje...
TRANSCRIPT
1
1
PROGRAMIRANJE II
Marko Rosić
Marko Rosić – Programiranje II
2
Sadržaj (1)1. Klasifikacija programskih jezika2. Primjeri programskih jezika3. Metodologija izrade programa4. Programiranje programskim jezikom
Pascal5. Izrada aplikacija s grafičkim
korisničkim sučeljem u okruženju sustava Delphi
Marko Rosić – Programiranje II
3
Sadržaj (2)
6. Objektno orijentirano programiranje7. Sustavi klijent – poslužitelj8. Tehnologije raspodijeljenih objekata9. Plan i program vježbi
4
1. Klasifikacija programskih jezika
2
Marko Rosić – Programiranje II
5
Sadržaj:
� Podjela programskih jezika prema namjeni� Podjela programskih jezika prema načinu
izvođenja� Podjela programskih jezika prema paradigmi
programiranja� Podjela programskih jezika prema
generacijskoj pripadnosti
Marko Rosić – Programiranje II
6
Korisne hiperveze� History of Programming Languages
(http://www.cs.iastate.edu/~leavens/ComS541Fall97/hw-pages/history/)
� Dictionary of Programming Languages(http://cgibin.erols.com/ziring/cgi-bin/cep/cep.pl?_total=1&_format=full&_userlink=1)
� T.J. Bergen, R. G. Gibson (eds.) , A History ofProgramming Languages, ACM Press, 1996.
� Programing history (http://www.programming-x.com/programming/history.html)
� Programming language(http://en.wikipedia.org/wiki/Talk:Programming_language)
Marko Rosić – Programiranje II
7
Klasifikacije programskih jezika
� Podjela po namjeni� Podjela po načinu izvođenja� Podjela po paradigmi programiranja� Podjela po generacijskoj pripadnosti
Marko Rosić – Programiranje II
8
Podjela programskih jezika po namjeni
� Jezici za poslovne primjene (Cobol).� Jezici za numeričke primjene (Fortran.
Algol).� Jezici orijentirani listama (Lisp).� Jezici opće namjene (C, C++, Java,
Pascal, Modula 2, Ada).
3
Marko Rosić – Programiranje II
9
Podjela programskih jezika po načinu izvođenja kreiranih programa
� Interpretatori� Kompilatori
Marko Rosić – Programiranje II
10
Podjela programskih jezika prema paradigmi programiranja
� Programski jezici strukturiranog programiranja
� Programski jezici objektno orijentiranog programiranja
� Programski jezici komponentnoorijentiranog programiranja
Marko Rosić – Programiranje II
11
Podjela programskih jezika po generacijskoj pripadnosti (I)
� Četiri generacije programskih jezika� Prva generacija:
� Programiranje binarnim kodom - jedini način programiranja prvih komercijalnih računala.
� Korak dalje: mnemonički kodovi instrukcija
Marko Rosić – Programiranje II
12
Podjela programskih jezika po generacijskoj pripadnosti (II)
� Druga generacija:� Simbolički jezici� Simboličke oznake memorijskih adresa� Prvi potprogrami
4
Marko Rosić – Programiranje II
13
Podjela programskih jezika po generacijskoj pripadnosti (III)
� Treća generacija:� Proceduralni programski jezici.� Jedna se instrukcija programskog jezika
treće generacije prevodi u više instrukcija strojnog koda.
� Olakšana prenosivost koda.
Marko Rosić – Programiranje II
14
Podjela programskih jezika po generacijskoj pripadnosti (IV)
� Četvrta generacija:� Veliki zahtjevi za razvojem programske
podrške.� Povećanje procesne moći računala.� Povećanje dostupnosti računala.� Interaktivna sučelja.� Specijalizirani programski jezici.� Prirodnija sintaksa u usporedbi s jezicima
treće generacije.
15
2. Primjeri programskih jezika
Marko Rosić – Programiranje II
16
Sadržaj:
� FORTRAN� BASIC� Pascal� C� Java� SQL
5
Marko Rosić – Programiranje II
17
Marko Rosić – Programiranje II
18
FORTRAN� Razvijen u pedesetim godina dvadesetog
stoljeća.� Još je u upotrebi.� Naziv FORTRAN je nastao kao skraćeni izraz
Formula Translator/Translation.� Glavna primjena FORTRANA je znanstveno-
numerička primjena.� Postoje proširenja FORTRAN-a koja
omogućavaju objektno orijentirano programiranje.
Marko Rosić – Programiranje II
19
Primjer FORTRAN koda
PROGRAM HELLOWRITE(*,10)
10 FORMAT('Hello, world!')STOPEND
Marko Rosić – Programiranje II
20
Korisne hiperveze� The FORTRAN Company,
http://www.fortran.com/� Notes on FORTRAN programming,
http://www.ibiblio.org/pub/languages/fortran/unfp.html
� The FORTRAN Programming Language,http://www.engin.umd.umich.edu/CIS/course.des/cis400/fortran/fortran.html
6
Marko Rosić – Programiranje II
21
BASIC� Beginner's All-purpose Symbolic Instruction
Code.� Čitava grupacija programskih jezika različitih
mogućnosti.� Razvijen sredinom šezdesetih godina prošlog
stoljeća. � Jednostavan za početnike.� Nije potrebno poznavati sklopovlje niti
funkcije operacijskog sustava za programiranje u BASIC-u.
� Velika prihvaćenost.
Marko Rosić – Programiranje II
22
Primjer BASIC koda (I)10 INPUT "What is your name: "; U$
20 PRINT "Hello "; U$ 25 REM 30 INPUT "How many stars do you want: "; N 35 S$ = "" 40 FOR I = 1 TO N 50 S$ = S$ + "*" 55 NEXT I 60 PRINT S$ 65 REM 70 INPUT "Do you want more stars? "; A$ 80 IF LEN(A$) = 0 GOTO 70 90 A$ = LEFT$(A$, 1)
100 IF (A$ = "Y") OR (A$ = "y") THEN GOTO 30110 PRINT "Goodbye "; 120 FOR I = 1 TO 200 130 PRINT U$; " "; 140 NEXT I 150 PRINT
Marko Rosić – Programiranje II
23
Primjer BASIC koda (II)INPUT "What is your name"; UserName$PRINT "Hello "; UserName$DO
INPUT "How many stars do you want"; NumStarsStars$ = ""Stars$ = STRING$(NumStars, "*") 'PRINT Stars$
DOINPUT "Do you want more stars"; Answer$
LOOP UNTIL Answer$ <> ""LOOP WHILE UCASE$(LEFT$(Answer$, 1)) = "Y"
PRINT "Goodbye ";FOR I = 1 TO 200
PRINT UserName$; " ";NEXT IPRINT
Napomena: Programi iz primjera I i primjera II imaju isti rezultat izvršavanja. Uočiti razlike u strukturi i dijalektu jezika
Marko Rosić – Programiranje II
24
Korisne hiperveze
� BASIC programming language,http://www.fact-index.com/b/ba/basic_programming_language.html
� Programming in Visual Basic, http://www.hitmill.com/programming/vb.htm
7
Marko Rosić – Programiranje II
25
Pascal (I)� Niclaus Wirth – kasne šezdesete godine
prošlog stoljeća.� Donekle zasnovan na programskom jeziku
Algol.� Prvotni cilj: izrada programskog jezika
prikladnog za učenje programiranja. Rezultat: ozbiljan i kvalitetan programski jezik namijenjen razvoju složenih aplikacija.
� Tekst procesor TeX i izvorna verzija Machintoshovog operacijskog sustava su napisani u Pascalu.
Marko Rosić – Programiranje II
26
Primjer Pascal kodaprogram absolute_value;var n: integer;begin
read (n);if n < 0 then
n := -n;writeln (n)
end.
Marko Rosić – Programiranje II
27
Pascal (II)� Česte usporedbe s programskim jezikom C.� Olakšana prenosivost koda zahvaljujući
međukodu (p-kod).� Kasnije je Wirt nastojao proširiti Pascal
objektno orijentiranim mogućnostima. Rezultati: Programski jezici Oberon i Modula 2. “Pravi” komercijalno uspješan objektno orijentirani Pascal: Delphi tvrtke Borland.
Marko Rosić – Programiranje II
28
Najpoznatiji Pascal kompilatori
� Free Pascal (izrađen u Pascal-u) – izrađen za različite računalne platforme.
� Turbo Pascal – do pojave Delphi okruženja ovo je bio najsnažniji i najčešće korišćen Pascal kompilator. Starije verzije ovog kompilatora se mogu besplatno dobiti preko Borlandove web stranice.
� GNU Pascal kompilator� Delphi – objektno orijentirano Pascal
okruženje. Vrlo moćan razvojni alat. Mogućnost izrade aplikacija koje će se izvršavati u .NET okruženju.
8
Marko Rosić – Programiranje II
29
Korisne hiperveze (I)� Learn Pascal
(http://web.mit.edu/taoyue/www/tutorials/pascal/contents.html)
� Pascal Tutorial(http://www.thinkquest.org/library/site_sum.html?tname=27297&url=27297/)
� Preporuke za kodiranje čitljivih programa u Pascalu: Stan Sieler, How To Code: Pascal(http://www.allegro.com/papers/htpp.html)
� Kritike Pascal-a: Brian W. Kernighan, Why Pascal is Not My Favorite Programming Language (http://www.lysator.liu.se/c/bwk-on-pascal.html)
Marko Rosić – Programiranje II
30
Korisne hiperveze (II)
� Free Pascal(http://www.freepascal.org/)
� GNU Pascal (http://www.gnu-pascal.de/gpc/h-index.html)
� Borland (www.borland.com)� Web stranica programera u Turbo
Pascal-u (http://www.devq.net/pascal/)
Marko Rosić – Programiranje II
31
Programski jezik C� Kreatori: Thompson i Ritchie, rane
sedamdesete godine prošlog stoljeća.� Razvijen za UNIX operacijski sustav. Danas je
C vrlo popularan programski jezik namijenjen razvoju kako sistemske programske podrške tako i aplikacijske programske podrške.
� Programski jezik C je predstavljao osnovu za razvoj objektno orijentiranog programskog jezika C++.
Marko Rosić – Programiranje II
32
Primjer C koda
#include <stdio.h>
int main(void){
printf("Hello, World!\n");return 0;
}
9
Marko Rosić – Programiranje II
33
Korisne hiperveze
� C Programming, http://www.strath.ac.uk/IT/Docs/Ccourse/
� C Programming Tutorial, http://cplus.about.com/library/blctut.htm
Marko Rosić – Programiranje II
34
Programski jezik Java � Produkt tvrtke SUN.� U potpunosti objektno orijentirani jezik� Predstavljen u svibnju 1995. kao dio Green projekta.� Prvotno nazvan Oak.� Ideja: razviti objektno orijentirani, u potpunosti
platformski neovisan programski jezik.� Javin izvršni stroj – omogućavanje platformske
neovisnosti.� Java appleti – Java programi koji se izvršavaju unutar
Web preglednika.� Spor s Microsoftom u vezi s izvršnim strojem
ugrađenim u Microsoftove operacijske sustave.
Marko Rosić – Programiranje II
35Java kod
Java oktet-kod
Java kompilator
Provjera oktet-koda
Učitavanje klasa
JIT kompilator
Izvršno okruženje
Interpretator
Sklopovska oprema
�Faza izrade Java programa
�Faza izvršavanja Java programa
Razvojno i izvršno JAVA okruženje
Marko Rosić – Programiranje II
36
Primjer Java koda
1:public class Utils2: {3: static public Frame GetFrame(Component c)4: {5: if(c instanceof Frame || null==c)6: return c==null ? null : (Frame)c;7: return GetFrame(c.getParent());8: }9:}
10
Marko Rosić – Programiranje II
37
Korisne hiperveze
� Programming in Java, http://store.learn2.com/basket/assets/products/1950.asp
� Introduction to Programming UsingJava, http://www.faqs.org/docs/javap/contents.html
Marko Rosić – Programiranje II
38
SQL� Structured Query Language� Deklarativni programski jezik za rad s relacijskim bazama podataka.� Prva verzija: Tvrtka IBM� Standardiziran 1986.� Primjeri sustava za upravljanje bazama podataka koji koriste SQL:
DB2 � Ingres � InterBase � MySQL � Oracle � PostgreSQL � Microsoft SQL Server � SQLite � Sybase � Informix
Marko Rosić – Programiranje II
39
Primjer SQL izrazaSELECT ytd_sales AS Sales,
authors.au_fname + ' '+ authors.au_lname AS Author, ToAuthor = (ytd_sales * royalty) / 100,ToPublisher = ytd_sales - (ytd_sales * royalty) / 100
FROM titles INNER JOIN titleauthorON titles.title_id = titleauthor.title_id INNER JOIN authorsON titleauthor.au_id = authors.au_id
ORDER BY Sales DESC, Author ASC
Marko Rosić – Programiranje II
40
Korisne hiperveze
� SQL Tutorial, http://www.w3schools.com/sql/default.asp
� SQL Reference, http://www.contrib.andrew.cmu.edu/~shadow/sql.html
11
41
3. Metodologija izrade programa
Marko Rosić – Programiranje II
42
Sadržaj:
� Faze izrade programa� Vrednovanje programa
Marko Rosić – Programiranje II
43
Faze pri razvoju programa
1. Analiza zahtjeva2. Definicija zadatka3. Oblikovanje programa4. Kodiranje5. Testiranje6. Održavanje
Marko Rosić – Programiranje II
44
Timski rad
� Članovi tima: voditelji projekta (poštivanje rokova, prikaz programa naručiteljima), tehnički voditelji (unutarnji integritet proizvoda), programeri, oblikovatelji korisničkog sučelja…
� Kod izrade kvalitetne aplikacije svaki član tima mora razumjeti principe, osnove i strategije kojima će se postići definirani ciljevi.
12
Marko Rosić – Programiranje II
45
Analiza zahtjeva� Što korisnik želi?� Opisati postavljeni zahtjev.� Ne preskakati proces definiranja ciljeva.
Dodatni trud se višestruko nadoknađuje u sljedećim fazama razvoja!
� Ispitati vjerojatnost nastanka pogrešaka.� U kakvom će se okruženju izvršavati
program?
Marko Rosić – Programiranje II
46
Analiza zahtjeva (2)� “Ljudi često postavljaju pogrešno pitanje i
traže nešto drugo od onoga što zapravo žele. Uvijek istražite što žele postići prije nego što pristanete na bilo kakav zahtjev.”
� “Programeri uvijek moraju razmišljati o proizvodu i na način kako bi to činio korisnik. Programeri moraju imati razumijevanja za dojam krajnjeg korisnika.” (Steve Meguire)
Marko Rosić – Programiranje II
47
Definicija zadatka
� Definiranje ulaznih podataka.� Definiranje izlaznih podataka.� Definiranje korisničkog sučelja.
Marko Rosić – Programiranje II
48
Oblikovanje programa
� Definiranje algoritama kojima će se rješitipojedini zadaci (pseudokod).
� Strukturiranje programa (strukturirano programiranje).
� Definiranje modela klasa (objektno orijentirano programiranje).
� Definiranje modela podataka.
13
Marko Rosić – Programiranje II
49
Kodiranje� Prevođenja algoritama opisanih
pseudokodom, modela klasa, strukture programa u nizove instrukcija izabranog programskog jezika.
� Provjera sintaksne ispravnosti koda.� Ispravljanje pogrešaka. Ispravljanje
pogrešaka u kasnijim fazama može biti otežano i skuplje .
Marko Rosić – Programiranje II
50
Testiranje
� Pripremiti dovoljan broj test podataka i test postupaka.
� Ispitivanje ponašanja programa pri graničnim ulaznim vrijednosti.
Marko Rosić – Programiranje II
51
Održavanje
� Ispravljanje naknadno uočenih pogrešaka.
� Prilagođavanje programa novim uvjetima.
� Zadovoljavanje dodatnih zahtjeva korisnika.
Marko Rosić – Programiranje II
52
Parametri vrednovanja programa� Korektnost� Robustnost� Održivost� Mogućnost lake ponovne upotrebljivosti� Interoperabilnost� Učinkovitost� Prenosivost� Sigurnost� Integritet� Jednostavnost za upotrebu� Kvalitet dokumentacije
14
53
4. Programiranje programskim jezikom
Pascal
Marko Rosić – Programiranje II
54
Sadržaj:� Struktura programa� Rezervirane riječi� Predefinirani
identifikatori� Konstante� Deklaracija varijabli� Osnovni tipovi podataka� Aritmetički operatori� Relacijski operatori� Logički operatori� Prioritet operatora� Numeričke funkcije� Ulazne instrukcije
� Izlazne instrukcije� Instrukcije kontrole
toka izvršavanja programa
� Repeticijske strukture� Nizovi� Zapisi� Potprogrami� Datoteke� Operacije s
alfanumeričkim nizovima
� Kazaljke
Marko Rosić – Programiranje II
55
Prvi Pascal program
program Hello; begin (* Glavni *)
writeln (‘Pozdrav') end. (* Glavni *)
IZLAZ:Pozdrav
Marko Rosić – Programiranje II
56
Struktura Pascal programaPROGRAM Naziv_programa;
CONST(* Deklaracija konstanti *)
TYPE(* Deklaracija tipova varijabli *)
VAR(* Deklaracija varijabli *)
(* Definicija potprograma *)
BEGIN(* Izvršne instrukcije *)
END.
15
Marko Rosić – Programiranje II
57
Rezervirane riječi
and array begin case const div do downto else end file for forward function goto if in label mod nil not of or packed procedure program record repeat set then
to type until var while with
Marko Rosić – Programiranje II
58
Predefinirani identifikatori
abs arctan boolean char cos dispose eofeoln exp false input integer ln maxint newodd ord output pack page pred read readln
real reset rewrite round sin sqr sqrt succtext true trunc write writeln
Marko Rosić – Programiranje II
59
Konstanteconst
Identifikator1 = vrijednost;Identifikator2 = vrijednost;Identifikator3 = vrijednost;
Primjer:
constName = 'Tao Yue';FirstLetter = 'a';Year = 1997;pi = 3.1415926535897932;UsingNetscapeNavigator = TRUE;
Marko Rosić – Programiranje II
60
Deklaracija varijabli
varIdentifierList1 : DataType1;IdentifierList2 : DataType2;IdentifierList3 : DataType3;
16
Marko Rosić – Programiranje II
61
Osnovni tipovi podataka
Marko Rosić – Programiranje II
62
Primjer deklariranja varijabli
varage, year, grade : integer;circumference : real;LetterGrade : char;DidYouFail : Boolean;
Marko Rosić – Programiranje II
63
Aritmetički operatori
Marko Rosić – Programiranje II
64
Relacijski operatori
17
Marko Rosić – Programiranje II
65
Logički operatori
Marko Rosić – Programiranje II
66
Prioritet operatora
1. not2. * / div mod and3. + - or4. < > <= >= = <>
Marko Rosić – Programiranje II
67
Numeričke funkcije
Marko Rosić – Programiranje II
68
Osnovne ulazne instrukcije
readln (lista varijabli); - čitanje vrijednosti navedenih varijabli s prelaskom u novi red nakon svake utipkane vrijednosti varijable.
read (lista varijabli); - čitanje vrijednosti navedenih varijabli bez prelaska u novi red nakon svake utipkane vrijednosti varijable.
18
Marko Rosić – Programiranje II
69
Primjer korištenja osnovnih ulaznih instrukcijaUtipkano s tipkovnice:
45 97 31 2 3
Slučajevi korištenja:
Marko Rosić – Programiranje II
70
Osnovne izlazne instrukcije
write(lista argumenata); - ispis argumenata bez prelaska u novi red
writeln(lista argumenata); - ispis argumenat s prelaskom u novi red
Marko Rosić – Programiranje II
71
Primjer: računanje udaljenosti dviju točaka koordinatnog sustava
PROGRAM udaljenost;VAR
x1,y1, x2, y2, d:real;BEGIN
clrscr;writeln('Unesi koordinate prve tocke');readln(x1, y1);writeln('Unesi koordinate druge tocke');readln(x2,y2);d:=sqrt(sqr(x2-x1)+sqr(y2-y1));writeln('d=',d:5:2);
END.
Marko Rosić – Programiranje II
72
Instrukcije kontrole toka izvršavanja programa
IF instrukcija
Najjednostavniji oblik:if BooleanExpression then
StatementIfTrue;
Složeniji oblik:if BooleanExpression then
beginStatement1;Statement2
end;
19
Marko Rosić – Programiranje II
73
Ugnježđene IF instrukcijeif Condition1 then
Statement1else
if Condition2 thenStatement2
elseStatement3;
OPREZ: Ukoliko nije drugačije određeno blokovima instrukcija, else se uvijek odnosi na posljednje navedeni if.
Marko Rosić – Programiranje II
74
Primjer: konverzija valutawrite('Unesi tecaj '); readln(t);writeln('1. E--->kn'); writeln('2. kn-->E'); write('Unesi zeljenu opciju '); readln(o);
IF o=1 THENBEGINwrite('Unesi iznos u eurima '); readln(e);k:=e*t;writeln(e:5:2,' eura = ',k:5:2,' kn');
ENDELSEBEGIN
write('Unesi iznos u kunama '); readln(k);e:=k/t;writeln(k:5:2,' kuna = ',e:5:2,' eura');
END;
Marko Rosić – Programiranje II
75
Primjer: površina trokutaPROGRAM povrsina;VAR a,b,c,s,P:real;BEGINclrscr;writeln('Unesi stranice trokuta');readln(a,b,c);IF (a+b<=c) OR (a+c<=b) OR (b+c<=a) THEN
writeln('Niste unijeli stranice trokuta!!!')ELSEBEGINs:=(a+b+c)/2;p:=sqrt(s*(s-a)*(s-b)*(s-c));WRITELN('P= ',p:5:2);
END;END.
Marko Rosić – Programiranje II
76
Primjer: kvadratna jednadžbaPROGRAM kvadratna_jednadzba;VAR a,b,c,x1,x2,d,r,i:real;BEGINwriteln('Unesi koeficijente:'); readln(a,b,c);d:=sqr(b)-4*a*c;IF d>0 THEN
BEGINx1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a);writeln('x1=',x1:5:2); writeln('x2=',x2:5:2);
END;IF d=0 THEN
BEGINx1:=-b/(2*a); writeln('x1=',x1:5:2);
END;IF d<0 THEN
BEGINr:=-b/(2*a); i:=sqrt(abs(d))/(2*a);writeln('x1=',r:5:2,'+ ',i:5:2,'i'); writeln('x2=',r:5:2,'- ',i:5:2,'i');
END;END.
20
Marko Rosić – Programiranje II
77
Case instrukcija
case selector of
List1: Statement1;List2: Statement2;...Listn: Statementn;
otherwise Statementend;
Napomena: Uporaba otherwise je opcionalna.
Marko Rosić – Programiranje II
78
Repeticijske strukture
Razlikujemo sljedeće vrste repeticijskih struktura:
� Fiksna repeticija� Repeticija s provjerom uvjeta
ponavljanja na početku strukture� Repeticija s provjerom uvjeta
ponavljanja na kraju strukture
Marko Rosić – Programiranje II
79
FOR instrukcija (fiksna repeticija)for index := StartingLow to EndingHigh do
statement;Ilifor index := StartingHigh downto EndingLow do
statement;
Primjer:sum := 0;
for count := 1 to 100 dosum := sum + count;
Marko Rosić – Programiranje II
80Primjer: suma kvadrata prvih 100 prirodnih brojeva
PROGRAM kvadrati;VAR i,suma:integer;
BEGINclrscr;suma:=0;FOR i:=1 TO 100 DO
BEGINwriteln(i,'. prolaz. Suma iznosi= ',suma, '. Sumi
pridodajem ',i);suma:=suma+i;
END;writeln('Konacna suma iznosi ',suma);
END.
21
Marko Rosić – Programiranje II
81Primjer: suma pozitivnih brojeva iz niza od proizvoljno unesenih 10 cijelih brojeva
PROGRAM kvadrati;VAR i,suma,x:integer;BEGIN
suma:=0;FOR i:=1 TO 10 DO
BEGINwrite('Unesi broj ');readln(x);IF x>0 THEN suma:=suma+x;
END;writeln('Suma pozitivnih iznosi ',suma);
END.
Marko Rosić – Programiranje II
82
Primjer: tablica množenja prirodnih brojeva od 1 do 5PROGRAM tm;VAR i,j:integer;
BEGINFOR i:=1 TO 5 DO
BEGINFOR j:=1 TO 5 DO
write(i*j,' ');writeln;
END;END.
Marko Rosić – Programiranje II
83
Primjer: djelitelji unesenog prirodnog broja
PROGRAM djelitelji;VAR i,n:integer;
BEGINwriteln('Unesi broj');readln(n);writeln('Djeljitelji:');FOR i:=1 TO n DO
IF (n mod i)=0 THEN writeln (i);END.
Marko Rosić – Programiranje II
84
Primjer: ispitivanje da li je uneseni broj prost ili složen
PROGRAM prost_slozen;VAR i,n,bd:integer;
BEGINwriteln('Unesi broj');readln(n);bd:=0;FOR i:=1 TO n DO
IF (n mod i)=0 THEN bd:=bd+1;IF bd<=2 THEN
writeln (n,' je prost broj')ELSE
writeln (n,' je slozen broj');END.
22
Marko Rosić – Programiranje II
85
Primjer: Suma svih prostih prirodnih brojeva manjih od 100PROGRAM suma_prostih_manjih_od_100;VAR j,i,n,bd,sp:integer;BEGINclrscr;sp:=0;FOR j:=1 to 99 DO
BEGINbd:=0;FOR i:=1 TO j DOIF (j mod i)=0 THEN bd:=bd+1;IF bd<=2 THEN sp:=sp+j;
END;writeln('Suma prostih iznosi ',sp);
END.
Marko Rosić – Programiranje II
86
Primjer: Najveći zajednički djelitelj
PROGRAM nzd;VAR x,y,a,b,d, n:integer;BEGINwriteln('Unesi dva broja'); readln(a,b);IF a<b THEN
BEGINx:=a; y:=b;
ENDELSEBEGINy:=a; x:=b;
END;FOR n:=1 TO x DOIF (x mod n = 0) and (y mod n = 0) THEN d:=n;
writeln('Najveci zajednicki djelitelj zadana dva broja je ',d);END.
Marko Rosić – Programiranje II
87
Primjer: ispis svih kombinacija loto 7 od 39
PROGRAM loto_7_39;USES crt;VAR n:longint;
a,b,c,d,e,f,g,bp,bd,bt,x:integer;BEGIN
n:=0;FOR a:=1 TO 33 DOFOR b:=a+1 TO 34 DOFOR c:=b+1 TO 35 DOFOR d:=c+1 TO 36 DOFOR e:=d+1 TO 37 DOFOR f:=e+1 TO 38 DOFOR g:=f+1 TO 39 DO
BEGINn:=n+1;writeln (n,'. kom=',a,' ',b,' ',c,' ',d,' ',e,' ',f,' ',g);
END;END.
Marko Rosić – Programiranje II
88
While-Do instrukcija� Repeticija s provjerom uvjeta ponavljanja na početku strukture.
while BooleanExpression dostatement;
Primjer:a := 5;
while a < 6 dobegin
writeln (a);a := a + 1
end;
23
Marko Rosić – Programiranje II
89Primjer: sumiranje prirodnih brojeva dok se ne unese broj 100PROGRAM zbroj;
VAR sum, x:integer;BEGIN
x:=0;sum:=0;WHILE x<>100 DO
BEGINreadln(x);sum:=sum+x;
END;writeln('Suma iznosi ',sum);
END.
Marko Rosić – Programiranje II
90
Repeat – Until instrukcija
� Repeticija s provjerom uvjeta ponavljanja na kraju strukture.
repeatstatement1;statement2
until BooleanExpression;
Marko Rosić – Programiranje II
91
Continue (Object Pascal)� Procedura continue se upotrebljava za forsirani izlaz iz
petlje na njen kraj, preskačući sve navode koji slijede nakon poziva od Continue.
� Primjer:varDone : Boolean;Error : Boolean;
beginDone := False;while not Done do begin{ neki kod }Error := SomeFunction;if Error then Continue; { skace na dno petlje }{ neki drugi kod koji ce se izvrsiti samo ako se nije pojavio error }end;
end;
Marko Rosić – Programiranje II
92
Break (Object Pascal)� Procedura break se upotrebljava za zaustavljanje izvršenja petlje bez
obzira da li je uvjet ponavljanja zadovoljen ili nije.� Primjer:
Var MyArray: array [0..99] of Integer;Index , SearchNumber, I : Integer;
beginFillArray; { procedura koja puni polje }Index := -1;SearchNumber := 50;for I := 0 to High(MyArray) do begin
if MyArray[I] = SearchNumber then beginIndex := I; Break;
end;end;
if Index <> -1 thenLabel1.Caption := 'Broj nađen na indeksu ' + IntToStr(Index)
elseLabel1.Caption := 'Broj nije pronađen u polju.';
end;
24
Marko Rosić – Programiranje II
93
Polja
Naziv_varijable= ARRAY[početni_indeks.. krajnji_indeks] OF tip_varijable;
Naziv_varijable= ARRAY[početni_indeks_1.. krajnji_indeks_1, …, početni_indeks_n. krajnji_indeks_n] OF tip_varijable;
Marko Rosić – Programiranje II
94
Primjer: Buble sortPROGRAM bubble_sort;VAR niz:ARRAY[1..50] of integer;
n,i,j,p:integer;BEGINREPEATwrite('Unesi broj elemenata '); readln(n);
UNTIL n<=50;FOR i:=1 TO n DOBEGINwrite('Unesi ',i,'. broj '); readln(niz[i]);
END;FOR i:=1 TO n-1 DOFOR j:=i+1 TO n DOIF niz[i]<niz[j] THENBEGINp:=niz[i]; niz[i]:=niz[j]; niz[j]:=p;
END;write('Sortirano... ');FOR i:=1 TO n DOwrite(niz[i],' ');
END.
Marko Rosić – Programiranje II
95Primjer: odstupanje unesenih elemenata niza od njihove srednje vrijednostiPROGRAM odstupanje;VAR niz:ARRAY[1..50] of integer;
n,i,s:integer;sv:real;
BEGINREPEATwrite('Unesi broj elemenata '); readln(n);
UNTIL n<=50;s:=0;FOR i:=1 TO n DOBEGINwrite('Unesi ',i,'. broj '); readln(niz[i]);s:=s+niz[i];
END;sv:=s/n; writeln('Srednja vrijednost ',sv:5:2);FOR i:=1 TO n DOwriteln(niz[i],' ',abs(niz[i]-sv):5:2);
END.
Marko Rosić – Programiranje II
96
Low i High funkcije (funkcije Object Pascala-a)
� Funkcija Low rezultira donjom granicom niza dok funkcija High rezultira gornjom granicom niza.
� Primjer:varX, I, Lower, Upper : Integer;MyArray : array[10..20] of Integer;
beginLower := Low(MyArray); { Lower sada sadrži 10 }Upper := High(MyArray); { Upper sada sadrži 20 }
25
Marko Rosić – Programiranje II
97
Dinamička polja (Object Pascal)
� Dinamičko polje se deklarira bez početne veličine. Kasnije se polje može kreirati sa specificiranom veličinom upotrebom SetLength funkcije.
� Primjer:varBigArray : array of Integer; { bez navođenja veličine }X : Integer;
beginX := GetArraySize; { funkcija koja vraca potrebnu velicinu}SetLength(BigArray, X); { dinamicko alociranje polja }
Marko Rosić – Programiranje II
98
Zapisi
� Zapis (record) je kolekcija povezanih podataka pohranjenih u istu jedinicu za spremanje.
naziv_zapisa = RECORD
lista_varijabli:tip_varijable;…
lista_varijabli:tip_varijable; END;
Marko Rosić – Programiranje II
99Primjer: zbrajanje kompleksnih brojevaPROGRAM zbrajanje_kompleksnih_brojeva;
TYPEkompl=RECORD
Re, Im:real;END;
VARx,y,z:kompl;
BEGINwriteln('Unesi realnu i imaginarnu komponentu prvog broja');readln(x.re, x.im);writeln('Unesi realnu i imaginarnu komponentu drugog broja');readln(y.re, y.im);z.re:=x.re+y.re;z.im:=x.im+y.im;writeln('Rezultat je z=', z.re, '+ ',z.im,'i');
END.
Marko Rosić – Programiranje II
100Primjer: sortiranje niza kompleksnih brojeva
PROGRAM zbrajanje_kompleksnih_brojeva;
USES crt;TYPEkompl=RECORD
Re, Im:real;END;
niz_kompl=ARRAY[1..100] OF kompl;VAR
niz:niz_kompl;p:kompl;i,j,n:integer;
BEGINREPEAT
write('Koliko †e biti elemenata u nizu ');
readln(n);UNTIL n<101;
FOR i:=1 TO n DOBEGINwriteln('Unesi realnu i imaginarnu komponentu ',i,'. broja');readln(niz[i].re, niz[i].im);
END;FOR i:=1 TO n-1 DOFOR j:=i+1 TO n DO
IF sqrt(sqr(niz[i].re)+sqr(niz[i].im))<sqrt(sqr(niz[j].re)+sqr(niz[j].im))THEN
BEGINp:=niz[i]; niz[i]:=niz[j]; niz[j]:=p;
END;FOR i:=1 TO n DO
writeln('z',i,'=', niz[i].re:5:2, '+ ',niz[i].im:5:2,'i | |=',sqrt(sqr(niz[i].re)+sqr(niz[i].im)):5:2 );
END.
26
Marko Rosić – Programiranje II
101
Potprogrami
� Procedure� Funkcije
Marko Rosić – Programiranje II
102
Deklariranje zaglavlja funkcije
1. Ključna riječ FUNCTION2. Naziv funkcije3. Parametri funkcije4. Tip rezultataPrimjer:FUNCTION faktorijel(n:integer):integer;
Marko Rosić – Programiranje II
103
Deklariranje zaglavlja procedure
1. Ključna riječ PROCEDURE2. Naziv procedure3. Parametri procedure
Primjer:PROCEDURE unos(VAR x:matrica; VAR
k,l:integer);
Marko Rosić – Programiranje II
104
27
Marko Rosić – Programiranje II
105
Prijenos parametara
procedure MojaProcedura(X: Integer; var Y: Word; const Z: string )
var S: string;
begin
X := X * 2;
Y := X;
S := Z + IntToStr(X);
end;
parametar po
vrijednosti
parametar po
adresi
constantni
parametar
Marko Rosić – Programiranje II
106
Primjer: računanje faktorijelaPROGRAM racunanje_faktorijela;
VAR a:integer;
FUNCTION faktorijel(n:integer):integer;VAR i,u:integer;BEGINu:=1;FOR i:=1 TO n DOu:=u*i;
faktorijel:=u;END;
BEGINwrite('Unesi broj ');readln(a);writeln(a,'!=',faktorijel(a));
END.
Marko Rosić – Programiranje II
107
Primjer: binomni koeficijentPROGRAM binomni_koeficijent;USES crt;VAR n,k:integer;
b:real;
FUNCTION faktorijel(n:integer):integer;VAR i,u:integer;BEGINu:=1;FOR i:=1 TO n DOu:=u*i;
faktorijel:=u;END;
BEGINwriteln('Unesi n i k ');readln(n,k);b:=faktorijel(n)/(faktorijel(k)*faktorijel(n-k));writeln(n,' povrh ', k,' = ',b:5:0);
END.
Marko Rosić – Programiranje II
108Primjer: izračun izraza za potenciranje binoma
PROGRAM mmm;USES crt;VAR n,i:integer;
FUNCTION faktorijel(n:integer):integer;VAR i,u:integer;BEGINu:=1;FOR i:=1 TO n DOu:=u*i;
faktorijel:=u;END;
FUNCTION bin_koef(n,k:integer):real;BEGIN
bin_koef:=faktorijel(n)/(faktorijel(k)*faktorijel(n-k));
END;
BEGIN
writeln('Unesi potenciju ');
readln(n);
write('(a+b)^',n,'=');
FOR i:=0 TO n DO
write(' ',bin_koef(n,i):3:0,'a^',n-i,'b^',i);
END.
28
Marko Rosić – Programiranje II
109
Primjer: suma djelitelja unesenog brojaPROGRAM suma_djelitelja;VAR n:integer;
FUNCTION sumd(x:integer):integer;VAR i,sum:integer;BEGINsum:=0;FOR i:=1 TO X DOIF (X mod i=0) THEN sum:=sum+i;
sumd:=sum;END;
BEGINclrscr;write('Unesi broj ');readln(n);writeln('Suma djelitelja broja ',n,' iznosi ', sumd(n));
END.
Marko Rosić – Programiranje II
110
Primjer: površina trokutaPROGRAM pov_trokuta;VAR a,b,c:real;
FUNCTION povrsina(a,b,c:real):real;VAR s:real;BEGINs:=(a+b+c)/2;povrsina:=sqrt(s*(s-a)*(s-b)*(s-c));
END;
PROCEDURE unos(VAR a,b,c:real);BEGINREPEATwriteln('Unesi stranice trokuta'); readln(a,b,c);
UNTIL ( (a+b>c) and (a+c>b) and (b+c>a));END;
BEGINunos(a,b,c);writeln('P= ',povrsina(a,b,c):5:2);
END.
Marko Rosić – Programiranje II
111
Primjer: unos matricePROCEDURE unos(VAR x:matrica; VAR k,l:integer);
VARi,j:integer;
BEGINwrite('Unesi broj redaka matrice ');readln(k);write('Unesi broj stupaca matrice ');readln(l);FOR i:=1 TO k DO
FOR j:=1 TO l DOBEGIN
write('x[',i,',',j,']=');readln(x[i,j]);
END;END;
Marko Rosić – Programiranje II
112
Primjer: množenje matrica
PROCEDURE mnozi(VAR a,b,c:matrica;VAR m,n,p,q:integer);VAR i,j,k:integer;BEGIN
FOR i:=1 TO m DOFOR j:=1 TO q DO
BEGINc[i,j]:=0;FOR k:=1 TO n DOc[i,j]:=c[i,j]+a[i,k]*b[k,j];
END;END;
29
Marko Rosić – Programiranje II
113
Datoteke (deklaracija datoteka)Deklaracija:VAR
datoteka:file of tip_podataka;
Primjer:VAR
brojevi:file of integer;
VARpismo:text; text ≡ file of text
Marko Rosić – Programiranje II
114
Datoteke (inicijalizacija datoteka)assign(logičko ime datoteke, fizičko ime
datoteke); - pridruživanje logičkog imena datoteke (naziv varijable datotečnog tipa) stvarnoj datoteci
rewrite(logičko ime datoteke); - inicijalizacija datoteke za upis (gubitak prethodnog saržaja)
reset (logičko ime datoteke); - postavljanje datotečne kazaljke na njen početak (čitanje iz datoteke)
append(logičko ime datoteke); - dodavanje sadržaja u datoteku
Marko Rosić – Programiranje II
115
Operacije nad datotekama
write(logičko ime datoteke, varijabla); –unos u datoteku
read(logičko ime datoteke); - uzimanje podataka iz datoteke
close(logičko ime datoteke) – zatvaranje datoteke
Marko Rosić – Programiranje II
116
Primjer: kreiranje datoteke s prvih 100 prirodnih brojevaprogram Project2;
vardatoteka:file of integer;i:integer;
beginassign(datoteka, 'C:\brojevi.dat');rewrite(datoteka);for i:=1 to 10 do
write(datoteka, i);close(datoteka);
end.
30
Marko Rosić – Programiranje II
117
Primjer: čitanje iz datoteke cijelih brojevaprogram Project2;var
datoteka:file of integer;i,n:integer;
beginassign(datoteka, 'C:\brojevi.dat');reset(datoteka);while not(eof(datoteka)) do
beginread(datoteka, n);write(n, ' ');
end;close(datoteka);
end.
Marko Rosić – Programiranje II
118
Osnovne operacije nad nizovima znakova
� Kopiranje podnizova iz nizova znakova� Umetanje podnizova u nizove znakova� Brisanje podnizova iz nizova znakova� Funkcije: duljina niza, pozicija podniza
unutar niza znakova...
Marko Rosić – Programiranje II
119
Kopiranje podnizova iz nizova znakova
copy (niz, početna_pozicija, broj_znakova);Počevši od početne pozicije, iz niza se kopira
definirani broj znakova.Primjer:a:=‘Programski jezik Pascal’b � copy(a,12, 5)b -> ‘jezik’
Marko Rosić – Programiranje II
120
Umetanje podnizova u nizove znakova
insert (podniz, niz, početna_pozicija);Počevši od početne pozicije umetanje definiranig
podniza u zadani niz.Primjer:a:=‘Programski jezik Pascal’b:=‘Turbo ’insert (b, a, 18)a -> ‘Programski jezik Turbo Pascal’
31
Marko Rosić – Programiranje II
121
Brisanje podnizova iz nizova znakova
delete (niz, početna_pozicija, broj znakova);Počevši od početne pozicije, iz niza se briše
definirani broj znakova.Primjer:a:=‘Programski jezik Pascal’b � delete(a,12, 5)b -> ‘Programski Pascal’
Marko Rosić – Programiranje II
122
Duljina niza znakova
length (niz);
Primjer:a:=‘Programski jezik Pascal’d:=length(a)d -> 23
Marko Rosić – Programiranje II
123
Pozicija podniza unutar niza znakova
pos (podniz, niz);Rezultat funkcije je pozicija podniza unutar zadanog niza.Primjer:a:=‘Programski jezik Pascal’b:=pos (‘gram’, a);b -> 4Napomena: ukoliko se traženi podniz ne nalazi u zadanom
nizu tada je vrijednost funkcije 0. Funkcija vraća poziciju prvog podniza unutar zadanog niza (ukoliko se podniznalazi na više mjesta unutar niza).
Marko Rosić – Programiranje II
124
Primjer: Ispitivanje da li je unesena rečenica palindrom
writeln('Unesi recenicu ');readln(recenica);duzina:=length(recenica);for i:=1 to duzina do
slova[i]:=copy(recenica,i,1);writeln('Unesena slova');for i:=1 to duzina do
writeln(slova[i]);z:=0;for i:=1 to (duzina div 2) do
if slova[i]<>slova[duzina-i+1] then z:=1;if z=0 then
writeln('Palindrom')else
writeln('Nije palindrom');
32
Marko Rosić – Programiranje II
125
Primjer: Traženje riječi u zadanoj tekstovnoj datoteci
writeln('Unesi naziv datoteke');readln(ime);assign(dat,ime);reset(dat);writeln('Koju rijec trazis');readln(rijec);i:=1;while not(eof(dat)) do
beginreadln(dat,red);if pos(rijec,red)>0 then writeln('Pronadjeno u ',i,'. redu');i:=i+1;
end;
Marko Rosić – Programiranje II
126
Primjer: zamjena riječi u tekstovnoj datoteci
writeln('Unesi naziv datoteke'); readln(ime);assign(dat,ime); reset(dat);writeln('Koju rijec trazis'); readln(rijec);writeln('Zamjenska rijec'); readln(zamjena);
while not(eof(dat)) dobegin
readln(dat,red);if pos(rijec,red)>0 then
begini:=pos(rijec,red);delete(red, i, length(rijec));insert(zamjena, red, i);
end;writeln(red);
end;
Marko Rosić – Programiranje II
127
Alfanumeričke funkcije Object Pascal-a
Marko Rosić – Programiranje II
128
Skupovi
var
A : set of Byte;
B : set of (Zuta, Crvena, Zelena, Plava);
C : set of char;
Definicija i deklaracijaDefinicija i deklaracija
type
TIntegeri : 1..255;
var
A, B, C : set of TIntegeri;
begin
A := [1,2,3]; { postavljanje skupa }
B := [3,4,5,6];
C := []; { prazni skup }
C := A * B; { presjek }
C := C + [7]; { unija }
B := B – C; { razlika }
if 3 in B then DoSomething; { element }
end
OperacijeOperacije
33
Marko Rosić – Programiranje II
129
Skupovne operacije
A in Set1booleanordinal, setelementin
MojSet <> S1booleansetrazličitost<>
S2 = MojSetbooleansetjednakost=
S1 >= S2booleansetnadskup>=
Q <= MojSetbooleansetpodskup<=
S * Tsetsetpresjek*
S - Tsetsetrazlika–
Set1 + Set2setsetunija+PrimjerTip rezultataTip operandaOperacijaOperator
Marko Rosić – Programiranje II
130
Kazaljke
Deklaracija kazaljke:kazaljka=^osoba;
osoba=RECORDime:string[10];matbr:integer;sl:kazaljka;END;
Marko Rosić – Programiranje II
131
Rezerviranje i oslobađanje spremničkog prostora
new (kazaljka) – rezerviranje spremničkog prostora za kazaljku
dispose(kazaljka) – oslobađanje spremničkog prostora
Marko Rosić – Programiranje II
132
Primjer: StogStog – struktura podataka tipa LIFO (last in, first
out); element koji se posljednji umetne prvi izlazi iz stoga.
Operacije nad stogom:� Umetanje (push)� Uzimanje (pop) Dovoljna je jedna kazaljka (vrh) za pristup stogu.
Kazaljka vrh ukazuje na vrh stoga (element koji je posljednji ušao). Ostali su elementi povezani kazaljkama.
34
Marko Rosić – Programiranje II
133
Primjer: StogDeklaracija stoga:TYPE kazaljka=^osoba;
osoba=RECORDime:string[10];matbr:integer;sl:kazaljka;
END;VAR
vrh:kazaljka;U stog će se unutar ovog primjera smještati zapisi
koje će činiti ime i matični broj osobe.
Marko Rosić – Programiranje II
134
Umetanje elemenata u stog (push)
PROCEDURE push(VAR vrh:kazaljka;i:string;mb:integer);
VAR p:kazaljka;BEGIN
new(p);p^.ime:=i;p^.matbr:=mb;p^.sl:=vrh;vrh:=p;
END;
Marko Rosić – Programiranje II
135
Uzimanje elemenata iz stoga (pop)
PROCEDURE pop(VAR vrh:kazaljka);VAR p:kazaljka;BEGINIF vrh=nil THEN
writeln('Stog je prazan')ELSE
BEGINp:=vrh;writeln('Iz stoga izlazi ',p^.ime);vrh:=p^.sl;dispose(p);
END;END;
Marko Rosić – Programiranje II
136
Ispis elemenata stogaProcedure ispis(vrh:kazaljka);
VAR p:kazaljka;BEGINwriteln('Sadr§aj stoga:');IF vrh=nil THEN
writeln('STOG JE PRAZAN!!!')ELSE
BEGINp:=vrh;WHILE p<>nil DO
BEGINwriteln(p^.ime);p:=p^.sl;
END;END;
END;
35
Marko Rosić – Programiranje II
137
Primjer: Red
Red – struktura podataka tipa FIFO (first in, first out); element koji se prvi umetne prvi i izlazi iz reda.
Operacije nad redom:� Ulazak u red � Izlazak iz reda
Marko Rosić – Programiranje II
138
Ulaz u redPROCEDURE ulaz(VAR
pocetak:kazaljka;i:string;mb:integer);VAR p:kazaljka;
BEGINnew(p);p^.ime:=i;p^.matbr:=mb;p^.sl:=pocetak;pocetak:=p;
END;
Marko Rosić – Programiranje II
139
Izlaz iz redaPROCEDURE izlaz(VAR
pocetak:kazaljka);VAR p,q:kazaljka;BEGINIF pocetak=nil THENwriteln('Red je prazan')
ELSEIF pocetak^.sl=nil THENBEGINp:=pocetak;pocetak:=nil;dispose(p);
ENDELSE
BEGINp:=pocetak;q:=p^.sl;WHILE q^.sl<>nil DOBEGINp:=q;q:=p^.sl;
END;p^.sl:=nil;dispose(q);
END;END;
Marko Rosić – Programiranje II
140
Ispis elemenata redaPROCEDURE ispis(pocetak:kazaljka);
VAR p:kazaljka;BEGINwriteln('Sadržaj reda (s početka na kraj):');IF pocetak=nil THENwriteln('RED JE PRAZAN!!!')ELSEBEGINp:=pocetak;WHILE p<>nil DOBEGINwriteln(p^.ime);p:=p^.sl;
END;END;
writeln;END;
36
141
5. Izrada aplikacija s grafičkim korisničkim sučeljem u okruženju sustava Delphi
Marko Rosić – Programiranje II
142
Sadržaj:
� Nastanak razvojnog okruženja Delphi� Osnovni elementi integriranog
razvojnog okruženja Delphi� Osnovni elementi grafičkog korisničkog
sučelja aplikacija izrađenih u okruženju sustava Delphi
Marko Rosić – Programiranje II
143
Nastanak razvojnog okruženja Delphi � 90 godine 20. stoljeća: Borlandov Turbo
Pascal zauzima vodeće mjesto među kompilatorima Pascal-a.
� 1994. – početak rada na razvojnom okruženju Delphi.
� Temelj Delphi-a – programski jezik Object Pascal – objektno orijentirani programski jezik zasnovan na programskom jeziku Pascal.
Marko Rosić – Programiranje II
144
Delphi
� Borland-ov produkt za brzi razvoj aplikacija (RAD - rapid application development)
� Mogućnost izrada aplikacija s grafičkim korisničkim sučeljem, konzolskih aplikacija ili Web aplikacija.
37
Marko Rosić – Programiranje II
145
Konkurentske tehnologije
� Microsoft Visual C� Microsoft Visual Basic� Microsoft J++� Borland Java Builder
Marko Rosić – Programiranje II
146Struktura aplikacija razvijenih unutar razvojnog okruženja Delphi
Nekompilirana aplikacija sadrži sljedeća tri tipa datoteka:
� Datoteku projekta (.dpr ekstenzija)� Datoteke formi (.dfm ekstenzija)� Datoteke s kodom pisanim programskim
jezikom Pascal/Object Pascal (.pas ekstenzija)
Marko Rosić – Programiranje II
147
Datoteka projekta
� Povezuje sve elemente projekta� Definira module projekta� Koristi se za pokretanje programa i
prijenos podatka o inicijalizaciji pri pokretanju programa
Marko Rosić – Programiranje II
148
Primjer datoteke projektaprogram Project1;
usesForms,Unit1 in 'Unit1.pas' {Form1},Unit2 in 'Unit2.pas';
{$R *.res}
beginApplication.Initialize;Application.CreateForm(TForm1, Form1);Application.Run;
end.
38
Marko Rosić – Programiranje II
149
Datoteka forme
� Sadrži inicijalne podatke o formi (dimenzije, položaj forme, tip znakova koji se koristi unutar forme,…)
� Definira elemente forme
Marko Rosić – Programiranje II
150
Primjer datoteke forme
objectForm1: TForm1
Left = 200Top = 108Width = 696
Height = 480Caption = 'Form1'
Font.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11
Font.Name = 'MS Sans Serif'Font.Style = []PixelsPerInch = 96
TextHeight = 13
objectButton1: TButton
Left = 176Top = 116Width = 75
Height = 25Caption = 'Button1'
TabOrder = 0end
end
Marko Rosić – Programiranje II
151
Datoteka s kodom
� Moguće je koristiti standardni Pascal i Object Pascal
� Program je moguće graditi korištenjem više datoteka s kodom
� Definicije klasa je preporučljivo pohranjivati u zasebne datoteke s kodom
Marko Rosić – Programiranje II
152
Primjer datoteke s kodomunit UCart;interfaceuses SysUtils;type
TTocka = classprivate
x,y: integer;public
constructor Create(aX,aY: integer);function Info: string;
end;
implementation constructor TTocka.Create(ax,ay: integer);
beginx := ax;y:=ay;
end;
function TTocka.Info: string;begin
result := IntToStr(X) + ',' + IntTostr(Y);
end;end.
39
Marko Rosić – Programiranje II
153
Delphi IDE (Inetegrated Development Enviroment)
Marko Rosić – Programiranje II
154
Radni prostor Delphi-a� Glavni dio Delphi-jevog IDE-a� Radni prostor inicijalno prikazuje Form
Designer. Pomoću Form Designer-a kreiraju se forme.
� Forma može biti glavni prozor programa, dijalog box, ili bilo koja druga vrsta prozora.
� Form Designer se koristi za postavljanje, pomicanje i promjenu veličine komponentama kao dio procesa kreiranja forme.
Marko Rosić – Programiranje II
155
Elementi radnog prostora
Debug toolbar
New SaveOpen
project
Remove
file from
project
View
unit
Toggle
form/unit
New Save all Add file to
project
View
Form
New
form
Standard toolbar View toolbar Desktops toolbar
Name of saved
desktop layout
Save current
desktop
List of projects
you can run
Trace
into
Set debug
desktop
Run Pause Step
over
Internet toolbar
New WebSnap
Application
New WebSnap
Data Module
New WebSnap
Page ModuleExternal
Editor
Da saznaš što koji button radi,
pokaži na njega na trenutak dok
se ne pojavi tooltip.
Možeš upotrijebiti desni klik da
sakriješ bilo koji toolbar. Ako se
be pokazuje, izaberi View |
Toolbars i izaberi one koje želiš.
Component palette pages, grupirane po funkcijama
Komponente
Klikni da vidišjoš stranica
Marko Rosić – Programiranje II
156
Object inspector� Pomoću Object inspector-a mijenjaju se
svojstva i događaji objekata.� Object inspector ima dvije stranice:
stranicu svojstava (propertyes tab) i stranicu događaja (events tab).
� Stranica događaja sadrži listu događaja objekata. Događaji se pojavljuju tokom interakcije korisnika s objektom.
40
Marko Rosić – Programiranje II
157
Object inspektorNakon što staviš komponentu na formu, Object Inspector dinamički mijenja skupproperty-ja koje će prikazatim ovisno o izabranoj komponenti
Marko Rosić – Programiranje II
158
Hijerarhijsko stablo objekata
Object TreeView, ObjectInspector, i Form Designerrade zajedno. Kada klikneš
na objekt iz forme, onda seautomatski mijenjaju fokusi
u Object TreeView i ObjectInspector i obrnuto.
Pritisni Alt-Shift-F11 dafokusiraš na ObjectTreeView-u
159
Osnovni elementi grafičkog korisničkog sučelja aplikacija izrađenih u okruženju sustava Delphi
Marko Rosić – Programiranje II
160
Polje za unos teksta
� Delphi terminologija - Edit
Najvažnija svojstva:� Name – naziv objekta� Text – sadržaj polja za unos teksta
41
Marko Rosić – Programiranje II
161
Oznaka
� Delphi terminologija - Label
Najvažnija svojstva:� Name – naziv objekta� Caption – sadržaj oznake
Marko Rosić – Programiranje II
162
Dugme
� Delphi terminologija - Button
Najvažnija svojstva:� Name – naziv objekta� Caption – tekst na dugmetu
Marko Rosić – Programiranje II
163
Okvir za obilježavanje
� Delphi terminologija – Check box
Najvažnija svojstva:� Name – naziv objekta� Caption – tekst uz okvir� Checked – indikator obilježenosti
objekta
Marko Rosić – Programiranje II
164
Dugme za odabir opcije
� Delphi terminologija – radio button
Najvažnija svojstva:� Name – naziv objekta� Caption – tekst uz dugme� Checked – indikator obilježenosti
objekta
42
Marko Rosić – Programiranje II
165
Paradigma izrade programa unutar razvojnog okruženja Delphi i unutar sličnih razvojnih okruženja
Faze izrade programa:1. Dodavanje elemenata forme2. Određivanje svojstva elementima forme3. Dodavanje koda
Marko Rosić – Programiranje II
166
Dodavanje elemenata forme
2. Odabrani element pozicionirati i dimenzionirati unutar forme
1. Kliknuti na ikonu traženog elementa
Marko Rosić – Programiranje II
167
Određivanje svojstva elementima forme
Kliknuti na element kojem želimo promijeniti neko svojstvo. Unutar Object inspectora se aktivira označeni element. Klikanjem na željeno svojstvo možemo mu mijenjati vrijednosti.
Marko Rosić – Programiranje II
168
Dodavanje koda
Unutar Object inspectora odaberemo Events opciju. Rezultat je prikaz onih događaja odabranog elementa kojima možemo programirati ponašanje. Dvostrukim klikom na traženi događaj otvara se editor koda s umetnutim zaglavljem i tijelom procedure koja se izvršava pri traženom događaju.
43
Marko Rosić – Programiranje II
169
Dodavanje koda
Marko Rosić – Programiranje II
170
Primjer: Kvadratna jednadžba
Korisničko sučelje:
Oznake
Polja za unos teksta
Dugme
Marko Rosić – Programiranje II
171Aktivnost pri događaju d=“korisnik je pritisnuo dugme na korisničkom sučelju” (potprogram Button1Click)
procedure TForm1.Button1Click(Sender: TObject);
begina:=strtofloat(edit1.Text);b:=strtofloat(edit2.Text);c:=strtofloat(edit3.Text);d:=sqr(b)-4*a*c;if d=0 thenbeginx1:=-b/(2*a);rezultat:=floattostr(x1);label4.Caption:='x1= ' + rezultat;
end;
if d>0 thenbeginx1:=(-b+sqrt(d))/(2*a);x2:=(-b-sqrt(d))/(2*a);rezultat:=floattostr(x1) + ' ' + floattostr(x2);label4.Caption:=rezultat;
end;if d<0 thenbeginlabel4.Caption:='Nema rješenja u skupu
realnih brojeva';end;
end;end.
Marko Rosić – Programiranje II
172
Primjer: Kalkulator
Korisničko sučelje:
44
Marko Rosić – Programiranje II
173
Globalne varijable kalkulatorastart (cijeli broj)– ukoliko je vrijednost varijable
start jednaka vrijednosti 1 tada će se pri sljedećoj korisnikovoj akciji broj na zaslonu kalkulatora ispisivati od početka (primjerice, varijabla start ima vrijednost 1 po startanju kalkulatora ili nakon što korisnik pritisne dugme koje označava računsku operaciju). Ukoliko je vrijednost varijable start jednaka vrijednosti 0 tada se sljedeća unesena znamenka dodaje s desne strane na broj prikazan na zaslonu.
Marko Rosić – Programiranje II
174
operacija (cijeli broj)Moguća stanja:
0 – korisnik još nije odabrao operaciju1 – zbrajanje2 – oduzimanje3 – množenje4 – dijeljenje
Marko Rosić – Programiranje II
175
tocka (cijeli broj)Moguća stanja:
1 – dozvoljeno je dodati decimalnu točku broju na zaslonu
2 – nije dozvoljeno dodati decimalnu točku broju na zaslonu (jer je prikazani broj već posjeduje)
Marko Rosić – Programiranje II
176
prvi (realni broj) – spremnik prvog operanda
rezultat (realni broj) – rezultat izvođenja računske operacije
45
Marko Rosić – Programiranje II
177
Inicijalizacija kalkulatoraprocedure TForm1.Button17Click(Sender:
TObject);begin
display.Caption:='0';start:=1;operacija:=0;tocka:=0;
end;
Marko Rosić – Programiranje II
178Odziv na stisnuto dugme znamenke (primer: znamenka “9”)
procedure TForm1.Button9Click(Sender: TObject);begin
if (start=1) or (display.Caption='0') thendisplay.Caption:='9'elsedisplay.Caption:=display.Caption + '9';start:=0;
end;
Marko Rosić – Programiranje II
179
Odziv na stisnuto dugme s decimalnom točkom
procedure TForm1.Button11Click(Sender: TObject);
beginif tocka=0 thenbegindisplay.Caption:=display.Caption + '.';tocka:=1;
endend;
Marko Rosić – Programiranje II
180Odziv na stisnuto dugme s oznakom operacije (primjer: operacija “+”)
procedure TForm1.Button12Click(Sender: TObject);begin
prvi:=StrToFloat(display.Caption);operacija:=1;start:=1;tocka:=0;
end;
46
Marko Rosić – Programiranje II
181
Odziv na korisnikov zahtjev za ispisom rezultata (dugme “=“)
procedure TForm1.Button16Click(Sender: TObject);begin
if operacija<>0 thenbegincase operacija of
1:rezultat:=prvi + StrToFloat(display.Caption);2:rezultat:=prvi - StrToFloat(display.Caption);3:rezultat:=prvi * StrToFloat(display.Caption);4:begin
if StrToFloat(display.Caption)=0 then MessageDlg('Ne možeš dijeliti sa nulom!',mtError ,mbOKCancel,0)
elserezultat:=prvi / StrToFloat(display.Caption);
end;end;prvi:=StrToFloat(display.Caption);display.Caption:=FloatToStr(rezultat);start:=1;end;
end;
Marko Rosić – Programiranje II
182
Odziv na korisnikov zahtjev za brisanjem posljednjeg unesenog znaka (dugme “Del”)
procedure TForm1.Button18Click(Sender: TObject);beginif start=0 then
if length(display.Caption)=1 thenbegin
display.Caption:='0';start:=1;
endelse
display.Caption:=copy(display.Caption, 1, length(display.Caption)-1);end;
183
6. Objektno orijentirano programiranje
Marko Rosić – Programiranje II
184
Sadržaj:
� Motivacija za prelazak na paradigmu objektno orijentiranog programiranja
� Karakteristike objektno orijentiranog programiranja
� Object Pascal
47
Marko Rosić – Programiranje II
185
Literatura i korisne hiperveze
� Graham, I., (1994), Object Oriented Methods, Addison-Wesley Publishing Company Inc., London
� Object oriented programming tutorialhttp://www.quiver.freeserve.co.uk/OOP1.htm
� Object-Oriented Modeling, http://www.ifs.uni-linz.ac.at/ifs/useful/oomod/oomod.html
Marko Rosić – Programiranje II
186
Uvodni dio
� Stanje programskih jezika i načini programiranja prije uvođenja paradigme objektno orijentiranog programiranja.
� Motivi uvođenja objektno orijentiranog programiranja.
Marko Rosić – Programiranje II
187
Motivacija za promjenuparadigme:
� Kriza industrije programske podrškeračunalnih sustava
� Potreba za bržim razvojem kvalitetneprogramske podrške
� Preveliko “preklapanje” pri raduprogramera
Marko Rosić – Programiranje II
188
Rješenje:
� Strukturiranje programske podrške u procesu izrade na način koji bi omogućio ponovno korištenje teprogramske podrške. Omogućavanje nadogradivosti izgrađene programske podrške.
48
Marko Rosić – Programiranje II
189
Prvi koraci
� Kasne sedamdesete godine prošlog stoljeća: Adele Goldberg i Alan Kaypredstavili objektno orijentirani programski jezik Smalltalk
� Uspjeh? Pretežno samo na akademskoj razini. Industrija pokušava nadograditi postojeće programske jezike.
Marko Rosić – Programiranje II
190
Kako su se nadograđivalipostojeći programski jezici?
� Dodavanjem biblioteka potprograma� Problemi? Nije se izgubila potreba za
intervencijom unutar programskog kodapotprograma unutar biblioteka!
� Programi pisani jednim programskimjezikom nisu mogli koristiti potprogrameiz biblioteke nekog drugog programskogjezika.
Marko Rosić – Programiranje II
191
Prvo “pravo” rješenje!
� Temeljita nadogradnja programskogjezika C. Izrađen je objektno orijentiraniprogramski jezik C++. To je prviobjektno orijentirani programski jezikširoko prihvaćen od industrije.
Marko Rosić – Programiranje II
192
Osnovne karakteristike objektno orijentiranog programiranja
� Ponovno korištenje elemenata programske podrške (eng. Reusability)
� Nadogradivost elemenata programske podrške (eng. Extensibility)
Kako to postići: grupirati elemente programske podrške unutar klasa. Standardizirati uporabu klasa u različitim okruženjima. Omogućiti nadogradnju klasa.
49
Marko Rosić – Programiranje II
193
Osnovni pojmovi
� Objekt – element programa karakteriziran svojim svojstvima i metodama.
� Klasa – predložak po kojem se izgrađuju objekti.
Marko Rosić – Programiranje II
194
Jednostavan primjer
� Klasa: LJUDI� Svojstva: visina, težina, starost, spol,
zanimanje…� Metode: spava, jede, radi,...
� Objekti: Ante, Ana, Jozo, Marko
Marko Rosić – Programiranje II
195
Zadavanje svojstava i pozivanjemetoda objekata
� Ana.visina:=170;� Jozo.spol:=“M”� Ante.spava();� Marko.radi();
Marko Rosić – Programiranje II
196
Primjer 2
Klasa automobili:� Svojstva:
� Duzina, snaga motora, tip motora, vanjska boja, proizvođač, model...
� Metode:� Kretanje, kočenje, svjetlosno signaliziranje,
zvučno signaliziranje...
50
Marko Rosić – Programiranje II
197
Primjer 3: Klasa Pravokutnik
� Elementi objekta:� visina, � sirina, � površina, � opseg,� rotiraj,� zrcali.
Marko Rosić – Programiranje II
198
Klasa pravokutnik{visina: realni broj;širina: realni broj;
površina() {p:realni broj;p=visina*sirina;vrati p;}
opseg() {o:realni broj;o=2*(visina+sirina);vrati o;}
}
Marko Rosić – Programiranje II
199
Program 1
Ugradi klasu pravokutnik;
Glavni{
a = novi pravokutnik();
a.visina=3;
a.širina=5;
ispiši(‘Površina pravokutnika =‘, a.povrsina());
}
Marko Rosić – Programiranje II
200Program 2
Ugradi klasu pravokutnik;
Glavni(){
prvi = novi pravokutnik();
drugi = novi pravokutnik();
ispiši (‘unesi visinu i širinu prvog pravokutnika’);
uzmi (a.visina, a.širina);
ispiši (‘unesi visinu i širinu drugog pravokutnika’);
uzmi (b.visina, b.širina);
ako je a.površina()=b.površina tada ispiši(‘Pravokutnici imaju jednaku površinu)
u suprotnom{
ako je a.povr a.površina()>b.površina tada
ispiši(‘Prvi pravokutnik ima veću površinu)
u suprotnom
ispiši(‘Drugi pravokutnik ima veću površinu);}
}
51
Marko Rosić – Programiranje II
201
� Program 1 i program 2 koriste istu klasu; klasu pravokutnik.
� Programerima programa 1 i 2 potrebno je poznavati samo specifikacije klase pravokutnik. Sama implementacija klase nije bitna za korištenje njenih primjeraka.
Marko Rosić – Programiranje II
202
Enkapsulacija implementacije objekta
� Nazivi svojstava i metoda su jedini vidljivi dijelovi objekta.
� Implementacija objekta je skrivena. � Imena svojstava i metoda čine sučelje
objekta. � Komunikacija s objektom se vrši
korištenjem poruka.
Marko Rosić – Programiranje II
203
Ponovno korištenje elementa programske podrške
� Ostvarena je mogućnost ponovnog korištenja elemenata programske podrške (klasa pravokutnik)!
� Potrebno je ići dalje: omogućiti nadogradivnost takvih elemenata. Rješenje: nasljeđivanje!
Marko Rosić – Programiranje II
204
Primjer nasljeđivanja 1: Automobil
� Klasa automobil{svojstva: smjer, pozicija, brzina;metode: gas(), kočnicu(), volan()
}
52
Marko Rosić – Programiranje II
205
Klasa bolji_automobil nasljeđuje automobil{
metode: klima(), abs()
}
GLAVNI DIO PROGRAMA{
bolji_automobil audi=new bolji_automobil();
audi.brzina=135;
audi.klima(ukljuci);
audi.gas(dodaj);
}
Marko Rosić – Programiranje II
206
Primjer nasljeđivanja 2:Klasa nadograđeni_pravokutnik{
Naslijedi pravokutnik;
dijagonala() {d:realni broj;d=drugi_korjen(visina^2+sirina^);vrati d;}
}
Marko Rosić – Programiranje II
207
Program 3
Ugradi klasu nadograđeni_pravokutnik;
Glavni{
a = novi nadograđeni_pravokutnik();
a.visina=3; a.širina=5;
ispiši(‘Dijagonala pravokutnika =‘,
a.dijagonala());
}
Marko Rosić – Programiranje II
208
Privatni i javni elementi objekata
� Svako svojstvo ili metoda mogu biti privatni ili javni. Privatno svojstvo ili metoda vidljivo je samo elementima objekta, dok su javna svojstva i metode element sučelja objekta odnosno takva svojstva i metode su vidljiva okolini objekta
53
Marko Rosić – Programiranje II
209
Neke prednosti objektno orijentiranog programiranja
� Dobro oblikovani objekti predstavljaju osnovu za izgradnju sustava od prethodno korištenih modula što ima za posljedicu veću produktivnost pri izradi programske podrške.
� Ponovno korištenje klasa već testiranih unutar drugih sustava smanjuje mogućnost nastanka pogrešaka i vrijeme potrebno za testiranje sustava.
� Skrivanje implementacije objekata podiže sigurnost sustava.
Marko Rosić – Programiranje II
210
Neki potencijalni problemi
� Kratki rokovi isporuke programske podrške često ne ostavljaju mogućnost za kreiranje ponovno upotrebljivih modula.
� Nisu dovoljno razvijeni mehanizmi pretraživanja biblioteka klasa.
� Ostvarivanje višestrukog nasljeđivanja.
211
Object Pascal
Marko Rosić – Programiranje II
212
Osnovni elementi klasa Object Pascal-a
� Identifikatori razine pristupa� Konstruktori� Destruktori� Polja� Metode
54
Marko Rosić – Programiranje II
213
Razine pristupa
� Private (privatna)� Public (javna)� Protected (zaštičena)� Published (objavljena)
Marko Rosić – Programiranje II
214
Konstruktori
� Konstruktor je metoda koja se
upotrebljava za kreiranje objekta.
� Konstruktor se upotrebljava i za alociranje memorije potrebne klasi, ili za
izvršenje nekog početnog zadataka
Marko Rosić – Programiranje II
215
Destruktori� Destruktor je specijalna metoda koja se
automatski poziva prije nego što se objekt uništi.
� Obično se upotrebljava za alociranje memorije oslobođene od strane klase ili za izvođenje nekih prikladnih čišćenja memorije. Klasa ne mora imati destruktor pošto se može upotrijebiti destruktor bazne klase. Kao i konstruktor, i destruktor nema povratnu vrijednost.
Marko Rosić – Programiranje II
216
Polja
� Varijable definirane unutar klase. � Svojstva (stanja) klase (objekta).� Dostupnost svim metodama klase.� Razina pristupa može biti privatna,
javna ili zaštićena.
55
Marko Rosić – Programiranje II
217
Metode
� Funkcije i procedure deklarirane i definirane unutar klase.
� Prema razini pristupa mogu biti javne, privatne ili zaštičene.
Marko Rosić – Programiranje II
218
Preopterećivanje metode{ deklaracija 3 funkcije}
function MultiplyInt(Num1, Num2 : Integer) : Integer;
function MultiplyDouble(Num1, Num2 : Double) : Double;
function MultiplyWord(Num1, Num2 : Word) : Word;
{ deklaracija jedne 3 puta preopterećene funkcije }
function Multiply(Num1, Num2 : Integer) : Integer; overload;
function Multiply(Num1, Num2 : Double) : Double; overload;
function Multiply(Num1, Num2 : Word) : Word; overload;
Deklaracija
function Multiply(Num1, Num2 : Integer) : Integer;
begin
Result := Num1 * Num2;
end;
function Multiply(Num1, Num2 : Double) : Double;
begin
Result := Num1 * Num2;
end;
Definicija
Marko Rosić – Programiranje II
219
Propuštanje parametara
function PlayWaveFile(Name : string; Loop : Boolean = False; Loops : Integer =
10) : Integer;
{ pozivi funkcije PlayWaveFile }
R := PlayWaveFile('chime.wav');
R := PlayWaveFile('ding.wav', True);
R := PlayWaveFile('bell.wave', True, 5);
Deklaracija i pozivanjeDeklaracija i pozivanje
Marko Rosić – Programiranje II
220
Primjer: kvadratna jednadžba
Javni elementi klase:� koeficijenti a,b,c: realni brojevi� rješenje : String
Privatni elementi klase: � Diskriminanta: realni broj� rješenja x1 i x2:realni brojevi
56
Marko Rosić – Programiranje II
221
Korisničko sučelje je isto kao i kod realizacije ovog zadatka bez primjene objektno orijentirane paradigme programiranja (primjer kod razmatranja grafičkog korisničkog sučelja – ponovna upotreba forme).
Oznake
Polja za unos teksta
Dugme
Marko Rosić – Programiranje II
222
Definicija sučelja
interfacetypekvadratna=classprivatefunction x1: double;function x2: double;function diskriminanta: double;publica, b, c:double;function rjesenje:string;
end;
Naziv klase
Privatni elementi klase
Javni elementi klase
Marko Rosić – Programiranje II
223
Implementacija klaseimplementation
function kvadratna.diskriminanta:double;beginresult:=sqr(b)-4*a*c;
end;function kvadratna.x1:double;beginresult:=(-b+sqrt(diskriminanta))/(2*a);
end;function kvadratna.x2:double;beginresult:=(-b-sqrt(diskriminanta))/(2*a);
end;
function kvadratna.rjesenje:string;
var s:string;
begin
if diskriminanta < 0 then
s:='Jednadžba nema rješenja u skupu realnih brojeva';
if diskriminanta = 0 then
s:='Jedinstveno rjesenje x=' + floattostr(x1);
if diskriminanta > 0 then
s:='x1=' + floattostr(x1) + ' x2=' + floattostr(x2);
result:=s;
end;
Marko Rosić – Programiranje II
224
Korištenje klase unutar programa
varkj:kvadratna;
procedure TForm1.Button1Click(Sender: TObject);beginkj:=kvadratna.Create ;kj.a:=strtofloat(edit1.Text);kj.b:=strtofloat(edit2.Text);kj.c:=strtofloat(edit3.Text);label4.Caption:=kj.rjesenje;kj.Free
end;
Kreiranje objekta
Dodjeljivanje vrijednosti poljima a,b,c objekta kj
Ispis rezultata
Oslobađanje memorijskog
prostora
Procedura koja se izvršava nakon što
korisnik pritisne dugme Izračunaj
57
Marko Rosić – Programiranje II
225
Primjer: klasa točke (TTocke)� Privatni elementi klase:
� Koordinate x i y (polja)� Javne metode:
� Info – rezultira tekstom koji sadrži informaciju o koordinatama točke
� Distance – rezultira vrijednošću udaljene točke od neke druge točke. Dozvoliti mogućnost da druga točka također bude objekt ali i mogućnost zadavanje druge točke definiranjem njenih koordinata.
� GetX – rezultira prvom koordinatom točke� GetY – rezultira drugom koordinatom točke
Marko Rosić – Programiranje II
226
Delphi implementacija klase TTocke: definicija sučelja
interfaceuses SysUtils;type
TTocka = classprivate
x,y: integer;public
constructor Create(aX,aY: integer);function Info: string;function Distance(aX,aY: integer): double; overload;function Distance(aT: TTocka): double; overload;function GetX: integer;function GetY: integer;
end;
Definicija privatnih polja x i y
Definicija zaglavlja konstruktora; metode koja zadaje inicijalne vrijednosti
svojstvima klase
Definicije zaglavlja metoda
Marko Rosić – Programiranje II
227
Delphi implementacija klase TTocke: definicija metoda
implementationconstructor TTocka.Create(ax,ay:
integer);begin
x := ax;y:=ay;end;
function TTocka.GetX: integer;begin
result := x;end;
function TTocka.GetY: integer;begin
result := Y;end;
function TTocka.Info: string;
function TTocka.Info: string;begin
result := IntToStr(X) + ',' + IntTostr(Y);end;
function TTocka.Distance(ax,ay: integer): double;
beginresult := sqrt(sqr(ax-x)+sqr(ay-y));
end;
function TTocka.Distance(aT: TTocka): double;
beginresult := sqrt(sqr(aT.x-x)+sqr(aT.y-y));
end;
Marko Rosić – Programiranje II
228
Preopterećivanje metodefunction TTocka.Distance(ax,ay: integer): double;
beginresult := sqrt(sqr(ax-x)+sqr(ay-y));
end;
function TTocka.Distance(aT: TTocka): double;begin
result := sqrt(sqr(aT.x-x)+sqr(aT.y-y));end;
Dvije implementacije metode s istim imenom. Određivanje implementacije koja će se izvršiti ovisi o parametrima koji se koriste pri pozivu izvršavanja metode!
58
Marko Rosić – Programiranje II
229Nasljeđivanje svojstva i metoda klase TTocke: klasa TPolarTocka
typeTPolarTocka = class(TTocka)public
function Info: string; end;
Metoda info je već definirana unutar klase TTocke. Ovdje definirana metoda info “nadjačava” metodu info klase TTocke.
Metoda info klase TPolarTocka rezultira polarnim koordinatama zadane točke.
Marko Rosić – Programiranje II
230
Implementacija klase TPolarTocka (metoda info)
implementation
function TPolarTocka.Info: string;var r, f: double;begin
r := sqrt(sqr(GetX ) + sqr(Gety));f := arctan(Gety/Getx)*180/pi;result := FloatTostr(r) + ',' + FloatToStr(f);
end;
Marko Rosić – Programiranje II
231
Korištenje klase TPolarTockaunutar aplikacije
program ProjectTocke;
{$APPTYPE CONSOLE}
usesSysUtils,UCart,UPolar;
varT1: TPolarTocka ;
beginT1 := TPolarTocka.Create(4,5); Writeln(T1.Info);T1.Free;
end.
Kreiranje objekta i zadavanje vrijednosti svojstva
Pozivanje metode infoOslobađanje
memorijskog prostora