12. oo programiranje, java

36
OTVORENO RA^UNARSTVO o OO PROGRAMIRANJE I JAVA MARIO @AGAR

Upload: lequynh

Post on 29-Jan-2017

261 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 12. OO programiranje, Java

OTVORENO RA^UNARSTVOo OO PROGRAMIRANJE I JAVA

MARIO @AGAR

Page 2: 12. OO programiranje, Java

Otvoreno računarstvo

Otvoreno računarstvoo OO programiranje i Java

Mario Žagar

Page 3: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java3

Za domaću zadaću:o Proučiti jezik Javuo Poveznice (korisne i potrebne za lab. vježbe):

o J2SE 6 dokumentacijahttp://java.sun.com/reference/docs/

o Java Tutorialhttp://java.sun.com/developer/onlineTraining/

o Poveznice (korisne):o Razvojni alat JDK i JRE

http://java.sun.com o Knjiga "Thinking in Java" (u elektroničkom obliku):

http://www.mindview.net/Books/TIJ/ o I sve ostalo što dođe pod ruku :-)

Page 4: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java4

Struktureo Ako trebamo složeni tip podatka u jeziku C,

koristimo strukture:typedef struct _pravokutnik{        int a;        int b;        char *opis;} pravokutnik;

o Problem: svatko može promijeniti vrijednost člana strukture (npr. postaviti negativnu duljinu stranice) o Rješenje: napisati posebnu funkciju za postavljanje

vrijednosti, koja će prvo provjeriti vrijednosto kako osigurati da svi koriste tu funkciju i ne pristupaju članu

strukture izravno?

Page 5: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java5

Struktureo Problem: kako specijalizirati strukturu

o Kvadrat je poseban slučaj pravokutnika, s dvije iste stranice?

o Struktura jednaka pravokutniku + dodatno svojstvo o Kako to ostvariti strukturama?

Page 6: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java6

Objektno orijentirano programiranjeo Drugačiji način razmišljanja

strukture podataka i algoritmi <-> objekt

o OBJEKT – skup varijabli i s njima povezanih funkcijao oponaša objekt iz stvarnog svijeta o pamti stanje i modelira ponašanje

o RAZRED, KLASA – nacrt po kojem se stvara objekto sadrži varijable i svojstvene funkcije (metode), postoji

kontrola pristupa varijablama i funkcijama

o OBJEKT = primjerak, instanca razreda

Page 7: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java7

Objektno orijentirano programiranjeo Principi objektno orijentiranog programiranja

(OOP):o apstrakcija (abstraction)o enkapsulacija, učahurivanje (encapsulation)o nasljeđivanje (inheritance)o polimorfizam, višeobličje (polymorphism)

Page 8: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java8

Apstrakcijao Primjer automobila:

o država - kupovina, carina, PDV, registracija, brojevi, vlasništvo, porezi, ...

o vlasnik - potrošnja, servisi, pranje, ...o mehaničar - vlasnik, dijelovi, kilometri, cijena rada, ...

o Sve su to primjeri apstrakcije podatakao Apstrakcija - proces odbacivanja nepotrebnih

detalja o objektu, a zadržavanje onih podataka koji ga dovoljno opisuju

Page 9: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java9

Enkapsulacijao Korak dalje od apstrakcije je prepoznavanje

važnosti operacija nad podacimao podaci i operacije nad njima postaju cjelinao cilj je skrivanje implementacije (korisniku se na uvid

daje samo sučelje)o Podaci i operacije (metode, postupci - methods)

zajedno čine razred ili klasu (class) o Varijablu tipa određenog razreda zovemo objektom

ili instancom (instance)

Page 10: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java10

Enkapsulacijao Metode = funkcije koje pripadaju razredu (ime iz

Smalltalk-72) (plan, put, shema, postupak)o OOP bi se trebalo zvati Programiranje temeljeno

na razredima (Class-Based Programming - CBS)o primjer (tko zna što ovdje piše?):

DbrVmdn!a a ao

Dobar Vam dan!

Page 11: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java11

Nasljeđivanjeo Nasljeđivanje je proširivanje razreda (klase) koji je

već definiran o Preuzimanje iz “prošlosti”

o npr: Automobil ima upravljač. Golf je automobil s četiri kotača. Golf naravno ima upravljač, iako to nije posebno naglašeno.

o Pogodno za dodavanje svojstava (specifičnosti, detalja, novih inačica)

o Java i C# ne dozvoljavaju višestruko nasljeđivanje, umjesto toga implementiraju se sučelja (interface)

Page 12: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java12

Polimorfizamo Višeobličje, dijeljenje imenao Isto ime za različite metodeo Preopterećivanje (overloading)

o statičko razrješavanje konflikta imenao isto ime za različite metode unutar razreda uz različiti

broj parametarao Nadjačavanje (overriding)

o pravi polimorfizamo dinamičko razrješavanje

o metoda unutar podklase s istim imenom i “potpisom” važnija je od metode iz nadređene klase

o ne može se predvidjeti pri prevođenju već tijekom izvođenja

Page 13: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java13

Zadatako Napisati program koji računa površine raznih

geometrijskih likovao Zajednička karakteristika svih geometrijskih likova

je da sami "znaju" izračunati svoju površinuo Likovi sadrže podatke koji ih opisuju i karakteristični

su za svaki lik posebno.

Page 14: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java14

Zadatako Program treba iz datoteke pročitati oznaku tipa lika

i stvoriti objekt odgovarajućeg razreda (klase) te mu prenijeti parametre lika zapisane u liniji iza oznake tipa lika.

o Nakon što se svi podaci iz datoteke pročitaju i stvore objekti odgovarajućeg razreda, redom se ispisuju opisi likova (tip i parametri), njihove površine te zbroj površina koji zauzimaju svi stvoreni likovi.

Page 15: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java15

Zadatak - ulazUlazna datoteka:K20P10 40C40E50 30T30 40 50J20K20C10P5 8K5

O b j e k t P o d a c i u d a t o t e c i P r i m j e r p r a v o k u t n i k s t r a n i c e a i b 1 0 2 0 k v a d r a t s t r a n i c a a 1 0 t r o k u t s t r a n i c e a , b , c 1 0 2 0 3 0 j e d n a k o s t r a n i č a n t r o k u t s t r a n i c a a 1 0 e l i p s a r a d i j u s i r 1 i r 2 1 0 2 0 k r u g r a d i j u s r 1 0

O b j e k t O z n a k a v r s t e p r a v o k u t n i k P k v a d r a t K t r o k u t T j e d n a k o s t r a n i č a n t r o k u t J e l i p s a E k r u g C

Page 16: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java16

Prvo ...o Definirajmo osnovni apstraktni razred Liko Nasljeđuju ga objekti koji predstavljaju

geometrijske likove (Elipsa, Pravokutnik, Trokut):

Page 17: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java17

Nasljeđivanjeo Posebni slučajevi (kvadrat je posebni slučaj

pravokutnika, jednakostraničan trokut trokuta, krug elipse):

Page 18: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java18

Enkapsulacijao Svaki lik mora znati izračunati vlastitu površinuo Svaka površina se računa drugačijeo -> računanje površine je zajedničko ponašanje ->

mora biti opisano osnovnim razredom -> metodom Lik.izracunajPovrsinu()

G e o m e t r i j s k i l i k F o r m u l a P r a v o k u t n i k a * b K v a d r a t a * a T r o k u t s q r t [ s ( s - a ) ( s - b ) ( s - c ) ] , s = ( a + b + c ) / 2

( H e r o n o v a f o r m u l a ) J e d n a k o s t r a n i č a n t r o k u t

a * a * s q r t ( 3 ) / 4

E l i p s a r 1 * r 2 * p i K r u g r * r * p i

Page 19: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java19

Page 20: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java20

Opis razredao "redom se ispisuju opisi likova (tip i parametri),"o osim računanja površine, svaki lik mora imati i opiso Java – osnovni razred (java.lang.Object) ima

metodu toString(), koju treba nadjačati:

Page 21: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java21

Page 22: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java22

Kôd, pokažite kôd ...import java.util.*;import java.io.*;public abstract class Lik{        abstract double izracunajPovrsinu();

  ...}

import java.util.*;import java.io.*;public abstract class Lik{        abstract double izracunajPovrsinu();

  ...}

import java.util.*;public class Pravokutnik extends Lik{        double a,b;        ...        double izracunajPovrsinu()        {               return a*b;        }        public String toString()        {               return "Pravokutnik, a="+a+", b="+b+"\t");        }}

import java.util.*;public class Pravokutnik extends Lik{        double a,b;        ...        double izracunajPovrsinu()        {               return a*b;        }        public String toString()        {               return "Pravokutnik, a="+a+", b="+b+"\t");        }}

Lik.java

Pravokutnik.java

Page 23: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java23

import java.util.*;import java.lang.Math;public class Trokut extends Lik{        double a,b,c;        double izracunajPovrsinu(){                double s=(a+b+c)/2;                return Math.sqrt(s*(s-a)*(s-b)*(s-c));        }        public String toString(){                return "Trokut, a="+a+",b="+b+",c="+c+ "\t";        }}

import java.util.*;import java.lang.Math;public class Trokut extends Lik{        double a,b,c;        double izracunajPovrsinu(){                double s=(a+b+c)/2;                return Math.sqrt(s*(s-a)*(s-b)*(s-c));        }        public String toString(){                return "Trokut, a="+a+",b="+b+",c="+c+ "\t";        }}

import java.lang.Math;import java.util.*;public class Elipsa extends Lik{        double r1,r2;        double izracunajPovrsinu(){             return r1*r2*Math.PI;        }        public String toString(){             return "Elipsa, r1="+r1+", r2="+r2+"\t";        }}

import java.lang.Math;import java.util.*;public class Elipsa extends Lik{        double r1,r2;        double izracunajPovrsinu(){             return r1*r2*Math.PI;        }        public String toString(){             return "Elipsa, r1="+r1+", r2="+r2+"\t";        }}

Trokut.java

Elipsa.java

Page 24: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java24

Stvaranje objekatao Konstruktor:

o posebna metoda za stvaranje objektao istog naziva kao i klasao nema povratnog tipa

o Svaki Javin razred implicitno nasljeđuje razred java.lang.Object

o java.lang.Object definira konstruktor bez parametarao svaki Javin razred ima podrazumijevani konstruktor, bez

parametarao nije ga potrebno navoditi

Page 25: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java25

Konstruktoro Svaki Javin razred može definirati dodatne

konstruktore, s različitim potpisom:public class Pravokutnik extends Lik{      double a,b;      public Pravokutnik()      {

//podrazumijevani konstruktor (samo za primjer)a=1; b=2;

      }      public Pravokutnik(String redak)      {

    Vector args=new Vector();      args=parsiraj(redak,2);

    this.a=((Double)(args.get(0))).doubleValue();    this.b=((Double)(args.get(1))).doubleValue();

      }...

}

Page 26: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java26

Konstruktoro Poziv konstruktora:

Pravokutnik pk1=new Pravokutnik();Pravokutnik pk2=new Pravokutnik("3 4");

o Operator new:o alocira memorijski prostor za novi objekto poziva konstruktoro vraća referencu na novostvoreni objekt

Page 27: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java27

Zadatak, dodatnoo Konstruktor svakog razreda mora omogućiti unos

parametara objekta preko varijable tipa java.lang.String

o Unose se podaci učitani iz datoteke – duljine stranica odvojene razmakom o npr. konstruktor razreda Trokut prima niz od tri broja

odvojena prazninama, stranice a, b, c: 10 20 30

Page 28: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java28

Zadatak, dodatnoo Glavna metoda programa treba otvoriti datoteku

čije je ime zadano kao parametar komandne linije, stvoriti vektor (koristiti razred java.util.Vector) koji će sadržavati sve likove i popuniti ga objektima koji reprezentiraju geometrijske likove.

o Za svaki lik pročitati redak sa zapisom vrste lika i redak s parametrima, stvoriti odgovarajući objekt i prenijeti mu varijablu tipa java.lang.String s parametrima lika.

Page 29: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java29

Zadatak, dodatnoo Kad su svi podaci uneseni, ispisuje se opis i površina

svakog pojedinog lika te ukupna površina svih likova u datoteci. Ove zadatke obaviti slijednom obradom svih objekata pohranjenih u vektoru objekata

Page 30: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java30

/Primjeri/Likovi

Page 31: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java31

Metoda maino Definirat ćemo novi razred, koji će sadržavati samo

metodu main:public class Citac {   public static void main(String [] args) 

{...

}}

o Metoda main:o poziva se prilikom pokretanja programao prima argumente iz komandne linije preko polja

objekata tipa String (args u gornjem primjeru)

Page 32: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java32

Još kôdao Učitavamo podatke i instanciramo objekte:

public class Citac {public static void main(String [] args) {

...                String tmp=null, linija=null;Vector<Lik> kontejner= new Vector<Lik>();while(true){

tmp = breader.readLine();linija = breader.readLine();

          switch(tmp.charAt(0)){case 'P':

kontejner.add(new Pravokutnik(linija));              break;             case 'K':              kontejner.add(new Kvadrat(linija));               break;             case 'T':

//itd ...             // -> nastavak

NE programirati ovako!!!

[error handling izostavljen zbog manjka prostora!]

poziv konstruktora

Page 33: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java33

o Ispisujemo površine i ukupnu površinu:

int ukupna=0for(int i = 0; i < kontejner.size(); i++){                       

povrsina=kontejner.get(i).izracunajPovrsinu();ukupna+=povrsina;System.out.print(kontejner.get(i));System.out.println(", povrsina=[" + povrsina + "]cm^2" );

}System.out.println("Ukupna povrsina = [" +ukupna + "]cm^2");

}}

Page 34: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java34

Pokretanjeo Svaki razred u posebnoj datoteci, istog imena kao i

ime razreda (s nastavkom .java).o Prevoditelj se pokreće naredbom:

'javac <datoteke s izvornim kodom>'o nakon čega nastaju .class datoteke koje sadrže

prevedeni Java program. o Program se pokreće naredbom

'java <razred s metodom main()> <parametri>'

Page 35: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java35

I sve ovo zbog:

Page 36: 12. OO programiranje, Java

Otvoreno računarstvo - OO programiranje i Java

Pitanja?