sadržaj (2) programiranje...

58
1 1 PROGRAMIRANJE II Marko Rosić Marko Rosić – Programiranje II 2 Sadržaj (1) 1. Klasifikacija programskih jezika 2. Primjeri programskih jezika 3. Metodologija izrade programa 4. Programiranje programskim jezikom Pascal 5. 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 programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije raspodijeljenih objekata 9. Plan i program vježbi 4 1. Klasifikacija programskih jezika

Upload: others

Post on 05-Sep-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 2: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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).

Page 3: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 4: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 5: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 6: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 7: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 8: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

}

Page 9: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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:}

Page 10: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 11: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 12: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 13: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 14: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 15: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

Page 16: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 17: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 18: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

Page 19: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 20: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 21: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 22: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

Page 23: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

Page 24: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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 }

Page 25: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 26: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 27: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 28: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

Page 29: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 30: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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’

Page 31: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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');

Page 32: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 33: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 34: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

Page 35: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

Page 36: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 37: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 38: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 39: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 40: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 41: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 42: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 43: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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:

Page 44: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 45: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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;

Page 46: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 47: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 48: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 49: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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...

Page 50: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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);}

}

Page 51: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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()

}

Page 52: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 53: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 54: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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.

Page 55: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 56: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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

Page 57: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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!

Page 58: Sadržaj (2) PROGRAMIRANJE IIinformatikapmf.weebly.com/.../6/3/5/0/6350815/programiranje_predavanja.pdfObjektno orijentirano programiranje 7. Sustavi klijent – poslužitelj 8. Tehnologije

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