Objektno usmerjeno programiranje

Podobni dokumenti
Microsoft Word - M _mod..docx

Microsoft PowerPoint - Java_spremenljivke

Microsoft PowerPoint - Objekti_gradnja.ppt

Microsoft Word - M docx

Diapozitiv 1

Microsoft PowerPoint - OAPS1- P12.ppt

1 Načrtovanje programskih aplikacij NPA 2.del Srečo Uranič Učno gradivo je nastalo v okviru projekta Munus 2. Njegovo izdajo je omogočilo sofinanciran

Microsoft PowerPoint - Java-rekurzija.ppt

APS1

RAČUNALNIŠKI PRAKTIKUM d o c. d r. A N D R E J T A R A N E N K O Kdo bo z vami? Predavatelj: dr. Andrej Taranenko

CpE & ME 519

Protege, I.Savnik

Datum in kraj

Vprašanja za 2. izpitno enoto poklicne mature Strokovni predmet NPA Vprašanja Visual C# (4. letnik) 1. Uporabniški vmesnik razvojnega okolja Visual C#

Najprej si poglejmo učilnico. Za vse začetnike lahko tukaj najdete čudovito knjigo Python za programiranje. Poda odlično iztočnico za učenje. Priporoč

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

Strojna oprema

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Andraž Drčar Prevajanje javanskih programov z vstavljeno zložno kodo DIPLOMSKO DELO UNI

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

Print\A4\QualifyReduced.pmt

EKVITABILNE PARTICIJE IN TOEPLITZOVE MATRIKE Aleksandar Jurišić Politehnika Nova Gorica in IMFM Vipavska 13, p.p. 301, Nova Gorica Slovenija Štefko Mi

Microsoft Word - PRO1_2_Java_2015_12_22

Vaje: Matrike 1. Ugani rezultat, nato pa dokaži z indukcijo: (a) (b) [ ] n 1 1 ; n N 0 1 n ; n N Pokaži, da je množica x 0 y 0 x

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

Vprašanja za 2. izpitno enoto poklicne mature Strokovni predmet APJ Vsako izpitno vprašanje je sestavljeno iz posameznih delov, od katerih je vsak del

Arjan Topolovec PROFILIRANJE SPLETNIH APLIKACIJ Diplomsko delo Maribor, september 2010

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

Microsoft PowerPoint _12_15-11_predavanje(1_00)-IR-pdf

RAČUNALNIŠKA ORODJA V MATEMATIKI

Vrste

CMSC 838T Lecture

TNUV Lab

Brownova kovariancna razdalja

FGG13

Društvo za elektronske športe - spid.si Vaneča 69a 9201 Puconci Pravila tekmovanja na EPICENTER LAN 12 Hearthstone Na dogodku izvaja: Blaž Oršoš Datum

Podatkovni model ER

Prekinitveni način delovanja PLK Glavni program (OB1; MAIN) se izvaja ciklično Prekinitev začasno ustavi izvajanje glavnega programa in zažene izvajan

Nejc Muršič INOVATIVNE METRIKE PROGRAMSKE OPREME Magistrsko delo Maribor, julij 2016

Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se

Zagotavljanje trajnosti podatkov v ogrodju .Net

UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Nikolaj Čolić PRIMERJAVA PROGRAMSKIH JEZIKOV JAVA IN KOTLIN NA PRIMERU I

Delavnica Načrtovanje digitalnih vezij

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

Diapozitiv 1

Vaja04_Ver02

Matematika 2

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be

Univerza v Ljubljani Fakulteta za računalništvo in informatiko Fakulteta za matematiko in fiziko Martin Jakomin Sistem za avtomatsko ocenjevanje algor

Osnove matematicne analize 2018/19

Anže Martinčič VPLIV MOBILNIH APLIKACIJ ZA SAMOPOMOČ NA POSAMEZNIKA TER RAZVOJ TOVRSTNE APLIKACIJE Diplomsko delo Maribor, 2016

Matematika II (UNI) Izpit (23. avgust 2011) RE ITVE Naloga 1 (20 to k) Vektorja a = (0, 1, 1) in b = (1, 0, 1) oklepata trikotnik v prostoru. Izra una

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite

Poslovilno predavanje

GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega)

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

KUP OSA 2016 Regionalna trka VELESLALOM PAHULJE Ž REZULTATI COMPETITION JURY TECHNICAL DELEGATE JAGLICIC DEJAN (SSS) REFEREE IGNJATOVIC LJUBISA (OSK)

MERE SREDNJE VREDNOSTI

TNUV Lab5

Uporaba informacijsko komunikacijske tehnologije v naravoslovju in tehniki

eAsistent izpis

Microsoft Word - CNS-SW3 Quick Guide_SI

Presentation Name / Author

Slide 1

Microsoft PowerPoint - DPN_II__05__Zanesljivost.ppt [Compatibility Mode]

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

Osnove statistike v fizični geografiji 2

ANALITIČNA GEOMETRIJA V RAVNINI

DES

Diapozitiv 1

BO30001 BO30001 BO30002CZ BO30002CZ Sterling Silver Triple Dolphine Ring $14.00 Sterling Silver Triple Dolphine Ring $14.00 Sterling Silver Blue Opal

Slide 1

DOMACA NALOGA - LABORATORIJSKE VAJE NALOGA 1 Dani sta kompleksni stevili z in z Kompleksno stevilo je definirano kot : z = a + b, a p

Microsoft Word - UP_Lekcija04_2014.docx

(Microsoft Word - U\350enje telegrafije po Kochovi metodi.doc)

2. Model multiple regresije

Izdelava spletnih aplikacij z ogrodjem Angular

Univerza v Mariboru Fakulteta za naravoslovje in matematiko Oddelek za matematiko in ra unalni²tvo Izobraºevalna matematika Pisni izpit pri predmetu K

Microsoft Word - P101-A doc

Orodje za izvoz podatkov

Microsoft Word - M docx

Statistika, Prakticna matematika, , izrocki

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

Darko Pevec 1.a Informatika

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

FGG14

Microsoft Word - CNC obdelava kazalo vsebine.doc

Slajd 1

Microsoft Word - SI_vaja1.doc

ARS1

Sistemi Daljinskega Vodenja Vaja 3 Matej Kristan Laboratorij za Strojni Vid Fakulteta za elektrotehniko, Univerza v Ljubl

Microsoft Word - ARRS-MS-BR-07-A-2009.doc

Microsoft Word - A-3-Dezelak-SLO.doc

Microsoft Word - M docx

Športno društvo Jesenice, Ledarska 4, 4270 Jesenice, Tel.: (04) , Fax: (04) , Drsalni klub Jesenice in Zv

Navodila za izdelavo diplomske naloge

Vgrajeni sistemi Uvod & ponovitev C

Space Invaders Opis igre: Originalna igra: Space Invaders je arkadna igra, ki so jo ustvarili leta Bila je ena izmed prvih streljaških iger, v k

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

Transkripcija:

Objektno usmerjeno programiranje

Izrazoslovje OOP Razred pomeni kategorijo stvari Ime razreda lahko v Javi uporabimo kot tip polja ali lokalne spremenljivke ali kot povratni tip funkcije (metode) Objekt pomeni konkretno stvar, ki pripada nekemu razredu Temu pravimo tudi instanca Primer: poglejmo naslednjo vrstico: String s1 = Pozdrav"; Tu je String razred, spremenljivka s1 in vrednost Pozdrav" sta objekta (ali instanci iz razreda String )

Spremenljivke instance (podatkovni člani objekta) public class Ship1 { public double x, y, speed, direction; public String name; public class Test1 { public static void main(string[ ] args) { Ship1 s1 = new Ship1(); s1.x = 0.0; s1.y = 0.0; s1.speed = 1.0; s1.direction = 0.0; // East s1.name = "Ship1"; Ship1 s2 = new Ship1(); s2.x = 0.0; s2.y = 0.0; s2.speed = 2.0; s2.direction = 135.0; // Northwest s2.name = "Ship2";... // glej nadaljevanje Tvorba objekta

nadaljevanje... s1.x = s1.x + s1.speed * Math.cos(s1.direction * Math.PI / 180.0); s1.y = s1.y + s1.speed * Math.sin(s1.direction * Math.PI / 180.0); s2.x = s2.x + s2.speed * Math.cos(s2.direction * Math.PI / 180.0); s2.y = s2.y + s2.speed * Math.sin(s2.direction * Math.PI / 180.0); System.out.println(s1.name + " is at ( + s1.x + "," + s1.y + ")."); System.out.println(s2.name + " is at ("+ s2.x + "," + s2.y + ")."); Ship1 is at (1,0). Ship2 is at (- 1.41421,1.41421).

Objekti in reference Potem, ko definiramo razred, lahko zlahka deklariramo spremenljivko (referenco na objekt) za ta razred Ship s1, s2; Point start; Color blue; Reference objektov so v začetku null Vrednost null ne smemo enačiti z vrednostjo nič Primitivnih podatkovnih tipov ne moremo kastati na nek objekt Za eksplicitno tvorbo objekta, ki je naslovljen, potrebujemo operator new ClassName variablename = new ClassName();

Metode public class Ship2 { public double x=0.0, y=0.0, speed=1.0, direction=0.0; public String name = "UnnamedShip"; { private double degreestoradians(double degrees) return(degrees * Math.PI / 180.0); public void move() { double angle = degreestoradians(direction); x = x + speed * Math.cos(angle); y = y + speed * Math.sin(angle); public void printlocation() { System.out.println(name + " is at ( + x + "," + y +

Metode - nadaljevanje public class Test2 { public static void main(string[] args) { Ship2 s1 = new Ship2(); s1.name = "Ship1"; Ship2 s2 = new Ship2(); s2.direction = 135.0; // Northwest s2.speed = 2.0; s2.name = "Ship2"; s1.move(); s2.move(); s1.printlocation(); s2.printlocation(); Izpis Ship1 is at (1,0). Ship2 is at (- 1.41421,1.41421).

Statične metode Statične metode kličemo preko imena razreda: ClassName.functionName(arguments); Primer: razred Math ima statično metodo cos, ki pričakuje kot argument podatek tipa double. Tako lahko pokličemo Math.cos(3.5) ne da bi imeli kakšen objekt (instanco) iz razreda Math. Opomba za metodo main Sistem pokliče metodo main, ne da bi prej tvoril objekt. Zato lahko ta metoda direktno (brez predhodne tvorbe objekta) kliče le statične metode

Večkratno definiranje metod (overloading) public class Ship4 { public double x=0.0, y=0.0, speed=1.0, direction=0.0; public String name; public Ship4(double x, double y, double speed, double direction, String name) { this.x = x; this.y = y; this.speed = speed; this.direction = direction; this.name = name; public Ship4(String name) { this.name = name; private double degreestoradians(double degrees) { return(degrees * Math.PI / 180.0); Konstruktorja z enakim imenom (se nadaljuje)

Večkratno definiranje (nadaljevanje)... public void move() { move(1); public void move(int steps) { double angle = degreestoradians(direction); Metodi z enakim imenom x = x + (double)steps * speed * Math.cos(angle); y = y + (double)steps * speed * Math.sin(angle); public void printlocation() { System.out.println(name + " is at ( + x + "," + y + ").");

Večkratno prekrivanje metod (uporaba) public class Test4 { public static void main(string[] args) { Ship4 s1 = new Ship4("Ship1"); Ship4 s2 = new Ship4(0.0, 0.0, 2.0, 135.0, "Ship2"); s1.move(); s2.move(3); s1.printlocation(); s2.printlocation(); Ship1 is at (1.0,0.0). Ship2 is at (- 4.24264...,4.24264...).

getters setters public class Ship { private double x=0.0, y=0.0, speed=1.0, direction=0.0; private String name; /** Get current X location. */ public double getx() { return(x); /** Set current X location. */ public void setx(double x) { this.x = x; getter je metoda, ki vrne neko lastnost. setter je metoda, ki postavi neko lastnost na podano vrednost.

Dedovanje public class Speedboat extends Ship { private String color = "red"; public Speedboat(String name) { super(name); setspeed(20); public Speedboat(double x, double y, double speed, double direction, String name, String color) { super(x, y, speed, direction, name); setcolor(color); public void printlocation() { System.out.print(getColor().toUpperCase() + " "); super.printlocation();...

Uporaba izpeljanega in dedovanega razreda public class SpeedboatTest { public static void main(string[] args) { Speedboat s1 = new Speedboat("Speedboat1"); Speedboat s2 = new Speedboat(0.0, 0.0, 2.0, 135.0, "Speedboat2", "blue"); Ship s3 = new Ship (0.0, 0.0, 2.0, 135.0, "Ship1"); s1.move(); s2.move(); s3.move(); s1.printlocation(); s2.printlocation(); s3.printlocation(); RED Speedboat1 is at (20,0). BLUE Speedboat2 is at (-1.41421,1.41421). Ship1 is at (-1.41421,1.41421).

Kaj kaže prejšnji primer? Kako definiramo podrazrede (izpeljane razrede) Kako uporabljamo dedovane metode Uporaba super( ) za podedovane konstruktorje (le, če konstruktor btez argumentov ni uporaben) Uporaba super.nekametoda( ) za podedovane metode (le, če je konflikt v imenu)

Dedovani konstruktorji in super Ko tvorimo instanco (objekt) nekega podrazredam bo sistem avtomatično najprej poklical konstruktor nadrazreda Privzeto bo poklical nadrazredov konstruktor brez argumentov Če hočemo poklicati kakšen drug starševski konstruktor, ga pokličemo s super(args) Če v konstruktorju podrazreda kličemo super( ), mora to biti prvi stavek v konstruktorju

Redeklarirane metode in super.metoda() Če razred definira metodo z enakim imenom, tipom povratka in argumentov kot jo ima nadrazred, tedaj ta metoda prekrije metodo nadrazreda Prekrijemo (redeklaracija) lahko le metode, ki niso statične Če imamo lokalno definirano metodo in podedovano metodo z istim imenom in argumenti, lahko pokličemo podedovano metodo tako: super.imemetode(...) Zaporedna uporaba predpon super (super.super.imemetode) ni dovoljena.

Abstraktne razrede lahko naslavljamo, čeprav ne moremo tvoriti Abstraktni razredi Za abstraktne razrede ne moremo tvoriti instanc (ne moremo klicati new ). Abstraktni razredi dovolijo deklaracijo razredov, ki definirajo le del implementacije, podrobnosti pa morajo podati podrazredi Razred je abstrakten, če vsaj eni metodi razreda manjka implementacija Abstraktna metoda nima implementacije (pri C++ to imenujemo čista virtualna funkcija) Vsak razred, ki ima vsaj eno abstraktno metodo, moramo deklarirati kot abstrakten Če podrazred prekrije vse abstraktne metode nadrazreda, lahko tvorimo instance tega podrazreda Abstrakten razred ima lahko spremenljivke in polno implementirane metode Any subclass can override an inherited concrete method

Abstraktni razredi: primer public abstract class ThreeDShape { public abstract void drawshape(graphics g); public abstract void resize(double scale); ThreeDShape s1 = new Sphere(...); ThreeDShape[] shapes = new ThreeDShape[20]; shapes[0] = new Cube(...); Polje tipa ThreeDShape je precej uporabno Polje v resnici vsebuje le instance iz podrazredov ThreeDShape V zanki lahko preletavamo polje in kličemo metodi drawshape inresize Garantiramo, da imajo podrazred Cube (in podobni) omenjene metode

Vmesniki (interfaces) Vmesniki definirajo javanski tip, ki vsebuje le konstante in abstraktne metode Vmesnik ne implementira nobene metode, pač pa vsili to vsakemu razredu, ki uporablja tak vmesnik Razred, ki uporabi (implements) vmesnik, mora podati definicije vseh metod, ali pa mora tudi sam biti deklariran kot abstrakten

Vmesniki All methods in an interface are implicitly abstract and the keyword abstract is not required in a method declaration Data fields in an interface are implicitly static final (constants) All data fields and methods in an interface are implicitly public public interface Interface1 { DataType CONSTANT1 = value1; DataType CONSTANT2 = value2; ReturnType1 method1(argtype1 arg); ReturnType2 method2(argtype2 arg);

Uporaba več vmesnikov Vmesnike lahko izpeljemo (extends) tudi iz drugih vmesnikov (dedovanje), kar pripelje do pojmov podvmesniki in nadvmesniki. V razliko od razredov lahko vmesnike izpeljemo (iz več kot enega vmesnika public interface Displayable extends Drawable, Printable { // dodatne konstante in abstraktne metode... Uporaba več vmesnikov v razredih: Interfaces provide a form of multiple inheritance because a class can implement more than one interface at a time public class Circle extends TwoDShape implements Drawable, Printable {...

Polimorfizem Polymorphic dobesedno pomeni ima več oblik, pri objektno usmerjenem programiranju pa to pomeni ima več obnašanj Polimorfična metoda izvaja različne akcije, odvisno od objekta, ki je naslovljen To poznamo tudi kot povezovanje v času izvajanja (late binding, run-time binding) V praksi uporabljamo polimorfizem skupaj z naslavljanjem polj pri preletavanju kolekcij objektov in dostopu do polimorfičnih metod posameznih objektov

Polimorfizem: primer public class PolymorphismTest { public static void main(string[] args) { Ship[] ships = new Ship[3]; ships[0] = new Ship(0.0, 0.0, 2.0, 135.0, "Ship1"); ships[1] = new Speedboat("Speedboat1"); ships[2] = new Speedboat(0.0, 0.0, 2.0, 135.0, "Speedboat2", "blue"); for(int i=0; i<ships.length ; i++) { ships[i].move(); ships[i].printlocation(); RED Speedboat1 is at (20,0). BLUE Speedboat2 is at (-1.41421,1.41421). Ship1 is at (-1.41421,1.41421).