16.11.2014 Views

1 paskaita. 2010 02 10 Įvadas

1 paskaita. 2010 02 10 Įvadas

1 paskaita. 2010 02 10 Įvadas

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Objektinis programavimas<br />

Lekt. dr. Pijus Kasparaitis<br />

pkasparaitis@yahoo.com<br />

2009-<strong>20<strong>10</strong></strong> m. m. pavasario semestras


Tvarkaraštis<br />

Paskaita<br />

14-16 val. <strong>10</strong>1 a. (Balt.)<br />

Pratybos<br />

2 grupė 8-<strong>10</strong> val. 312 a. (Balt.)<br />

1 grupė <strong>10</strong>-12 val. 312 a. (Balt.)<br />

3 grupė 16-18 val. 309 a. (Balt.)<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 2


Sandas<br />

Paskaitos: 32 val.<br />

Laboratoriniai darbai: 32 val.<br />

Kreditų skaičius: 3<br />

Atsiskaitymas: egzaminas<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 3


Vertinimas<br />

Pratybų užduočių vertė –6 balai<br />

Klasės ir/arba namų darbai – 2 balai<br />

Kontroliniai darbai – 2 balai<br />

Mini projektas – 2 balai<br />

Egzamino vertė –4 balai<br />

Testas<br />

Programos kodo interpretavimas<br />

Mini programos rašymas<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 4


Kurso tikslas<br />

Supažindinti su objektinio<br />

programavimo paradigma<br />

Kaip objektinės kalbos pavyzdys<br />

imama Java programavimo kalba<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 5


Paskaitų konspektai<br />

http://uosis.mif.vu.lt/~pijus<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 6


Kurso turinys<br />

Įvadas<br />

Operatoriai<br />

Metodai<br />

Paketai<br />

Paveldėjimas<br />

Polimorfizmas<br />

Vidinės klasės<br />

Išimtys<br />

Apletai<br />

Išdėstymai<br />

Paveikslėliai<br />

Swing<br />

Įvedimas/išvedimas<br />

Kartojimas<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 7


Literatūra<br />

Bruce Eckel “Thinking in Java”<br />

http://www.mindview.net/Books/TIJ/<br />

Sun Developer Network “The Java<br />

Tutorial”<br />

http://java.sun.com/docs/books/tutorial/<br />

Agnė Brilingaitė “Objektinis<br />

programavimas”<br />

http://uosis.mif.vu.lt/~agne/Teaching/O<br />

OP/2009/<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 8


Programinė įranga<br />

Java SE (Standard Edition) JDK (Java<br />

Development Kit)<br />

http://java.sun.com/javase/downloads<br />

/index.jsp<br />

Netbeans<br />

http://netbeans.org/<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 9


Įvadas


Procedūrinis vs. objektinis<br />

programavimas<br />

Procedūrinėse programose<br />

operuojama kompiuterio architektūros<br />

konceptais<br />

Objektinėse programose galima<br />

operuoti sprendžiamos probleminės<br />

srities konceptais<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 11


Objektinis programavimas<br />

Probleminė sritis ir sprendimai<br />

aprašomi objektais<br />

Objektas – tai programos dalis, kuri<br />

turi duomenų ir gali atlikti veiksmus<br />

Objektai tarpusavyje<br />

bendradarbiauja, kad būtų gautas<br />

rezultatas<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 12


Realaus pasaulio objektai turi:<br />

Tapatybę (pvz., žmogus - asmens<br />

kodą, automobilis – registracijos<br />

numerį)<br />

Būseną (pvz., linksmas, stovintis)<br />

Elgseną (pvz., bėgti, važiuoti)<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 13


Objektai Java kalboje<br />

Objektų tapatybė realizuojama<br />

nuorodomis<br />

Būsena – klasės kintamaisiais<br />

Elgsena metodais (funkcijomis ar<br />

procedūromis)<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 14


Objektai Java kalboje<br />

Objektas yra atitinkamos klasės (angl.<br />

class) pavyzdys (angl. instance)<br />

Klasė dažnai vadinama abstrakčiu<br />

duomenų tipu (ADT)<br />

Klasė nusako bendras visų klasės<br />

objektų savybes<br />

Kiekvienas objektas gali turėti<br />

skirtingą būseną<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 15


Objekto tipas ir sąsaja<br />

Kiekvienas objektas turi tipą ir sąsają<br />

(angl. interface)<br />

Pvz., tipas – Trikampis<br />

sąsaja: piešti, trinti, pasukti,<br />

keistiSpalvą, sužinotiPlotą<br />

Objekto tipas naudojamas kuriant<br />

objektą, Trikampis t=new Trikampis();<br />

Manipuliavimas objektais vykdomas<br />

kviečiant sąsajos metodus, t.pasukti();<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 16


Objektinio programavimo privalumai<br />

Inkapsuliacija (realizacijos paslėpimas)<br />

Paveldėjimas<br />

Polimorfizmas<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 17


Realizacijos paslėpimas<br />

Programuotojus galima suskirstyti į<br />

klasių kūrėjus ir klasių naudotojus<br />

Realizacijos paslėpimas užtikrina, kad<br />

klasių naudotojai klasėje nieko<br />

nesugadins, nepanaudos neleistinu<br />

būdu ar pan.<br />

Klasių kūrėjai gali klasės viduje viską<br />

keisti, svarbu tik išsaugoti tą pačią<br />

sąsają<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 18


Paveldėjimas<br />

Tai vienas iš kodo pakartotinio<br />

panaudojimo būdų, kai bendresni tipai<br />

papildomi ar iš dalies pakeičiamas jų<br />

funkcionalumas<br />

Įgalina<br />

Specializaciją,<br />

pvz., Figūra -> Trikampis<br />

Apibendrinimą,<br />

pvz., Trikampis, Apskritimas -> Figūra<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 19


Polimorfizmas<br />

Galimybė naudoti bendresnius tipus<br />

nežinant konkretaus tipo<br />

Pvz., naudoti Figūrą vietoje Trikampio<br />

ar Apskritimo<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 20


Kas yra Java?<br />

Gana plačiai paplitusi tarpplatforminė<br />

atviro kodo programavimo kalba<br />

Java virtuali mašina (JVM), veikianti<br />

kaip virtualus kompiuteris<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 21


Programos elementai<br />

Klasės aprašymas saugomas faile, kurio<br />

vardas sutampa su klasės vardu.<br />

Klasės struktūroje yra<br />

kintamieji<br />

konstruktoriai<br />

metodai<br />

pagrindinis main metodas (jei tai pagrindinė<br />

klasė)<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 22


Vardų susitarimai<br />

Klasių vardai rašomi iš didžiosios<br />

raidės. Jei klasės vardas sudarytas iš<br />

kelių žodžių, žodžiai suliejami, tačiau<br />

kiekvienas žodis rašomas iš didžiosios<br />

raidės. Pvz., class VisosManoSpalvos<br />

Kintamųjų ir metodų vardams galioja<br />

tos pačios taisyklės, tik pirmas žodis<br />

rašomas iš mažosios raidės, pvz.,<br />

int keistiVisasSpalvas();<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 23


Klasės pavyzdys<br />

1 class KlasesPavyzdys {<br />

2 int kintamojoPavyzdys=0;<br />

3 int metodoPavyzdys()<br />

4 {<br />

5 return kintamojoPavyzdys+1;<br />

6 }<br />

7 }<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 24


Komentarai<br />

Komentarus galima rašyti tarp<br />

simbolių /* ir */<br />

Visa eilutė bus laikoma komentaru,<br />

jei jos pradžioje parašysime //<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 25


Kompiliavimas<br />

Kompiliavimas ir vykdymas paprastai<br />

atliekamas iš komandinės eilutės<br />

Kompiliavimas:<br />

javac Klase.java<br />

Gaunamas failas Klase.class, kuriame<br />

yra Java virtualios mašinos binarinis<br />

kodas, arba išvedamos kompiliavimo<br />

klaidos<br />

class failas yra pernešamas<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 26


Vykdymas<br />

Vykdymas:<br />

java Klase<br />

Failo plėtinio (class) nurodyti nereikia<br />

Java virtuali mašina binarinį kodą<br />

interpretuoja (verčia į mašininį kodą)<br />

ir atlieka instrukcijas arba išveda<br />

vykdymo klaidas<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 27


main metodas<br />

Programa pradedama vykdyti nuo<br />

metodo main<br />

Kviečiamas tik pagrindinės klasės main<br />

metodas, kitų klasių main metodai<br />

nekviečiami<br />

Sintaksė:<br />

public static void main (String [ ] args)<br />

{}<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 28


Komandinės eilutės parametrai<br />

Programai parametrus galima perduoti<br />

iš komandinės eilutės<br />

Parametrai nurodomi po komandos<br />

java ir klasės vardo ir skiriami tarpais,<br />

pvz., java Klase pirmas antras<br />

Komandinės eilutės parametrai tampa<br />

masyvo args elementų reikšmėmis, t.y.<br />

args[0] – pirmas, args[1] - antras<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 29


Atminties rūšys<br />

Stekas<br />

Atmintis labai greitai išskiriama ir<br />

atlaisvinama naudojant steko rodyklę<br />

Kompiliatorius turi iš anksto žinoti<br />

duomenų dydį ir saugojimo laiką<br />

Krūva (angl. heap)<br />

Išskyrimas ir atlaisvinimas lėtesnis<br />

Kompiliatoriui nereikia iš anksto žinoti<br />

duomenų dydžio ir saugojimo laiko<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 30


Stekas vs. krūva<br />

Objektai kuriami krūvoje naudojant<br />

komandą new<br />

Pagal objektinio programavimo idėją<br />

taip turėtų būti kuriami visi duomenys<br />

Kartais duomenų segmentai yra itin<br />

paprasti, todėl toks metodas<br />

neefektyvus<br />

Todėl Java kalboje yra aibė<br />

primityviųjų tipų, kurie saugomi steke<br />

Steke saugomos ir nuorodos į objektus<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 31


Duomenys<br />

Duomenys saugomi kintamuosiuose<br />

Duomenys gali būti dviejų tipų<br />

Objektiniai<br />

Primityvieji<br />

Objektinio tipo kintamajame<br />

saugoma nuoroda į objektą<br />

Primityviojo tipo kintamajame<br />

saugoma reikšmė<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 32


Primityvieji duomenų tipai<br />

Primityvieji duomenų tipai dar<br />

vadinami įdiegtais (angl. built-in)<br />

Tipų dydžiai yra fiksuoti visoms<br />

platformoms<br />

Primityvieji tipai<br />

loginis - boolean (true|false)<br />

sveikieji - byte, short, int, long<br />

realūs - float, double<br />

simbolinis - char<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 33


Kintamųjų deklaravimas<br />

Deklaravimas - tai naujo kintamojo vardo<br />

įvedimas programoje<br />

Visi kintamieji turi buti deklaruoti<br />

Inicializavimas - tai pradinės reikšmės<br />

suteikimas kintamajam<br />

Bendra deklaravimo forma:<br />

tipas kintamasis1, kintamasis2;<br />

tipas kintamasis1 = reikšmė1,<br />

kintamasis2 = reikšmė2;<br />

Konstantos deklaruojamos papildomai<br />

naudojant raktinius žodžius static final<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 34


Kintamųjų deklaravimo pavyzdžiai<br />

int a, b;<br />

b=12;<br />

double c=5.33; float d=3.2f;<br />

final static doule manoPi=3.14;<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 35


Numatytosios reikšmės<br />

Primityviojo tipo kintamieji inicijuojami su<br />

numatytosiomis reikšmėmis (default values)<br />

Numatytosios reikšmės<br />

boolean false<br />

char ‘\u0000’ (null)<br />

byte (byte)0<br />

short (short)0<br />

int 0<br />

long 0L<br />

float 0.0f<br />

double 0.0d<br />

Objektinio tipo kintamieji inicijuojami su null<br />

reikšme<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 36


Primityvių tipų objektiniai apvalkalai<br />

Kiekvienam primityviam tipui egzistuoja<br />

objektinis tipas (angl. Wrapper).<br />

Primityvių ir objektinių tipų atitinkamybė<br />

boolean Boolean<br />

char Character 16 bitų<br />

byte Byte 8 bitai<br />

short Short 16 bitų<br />

int Integer 32 bitai<br />

long Long 64 bitai<br />

float Float 32 bitai<br />

double Double 64 bitai<br />

char simbolis ='a';<br />

Character C = new Character('a');<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 37


Masyvas - sudėtinis duomenų tipas<br />

Masyvas yra indeksuota to paties tipo<br />

reikšmių seka.<br />

Pavyzdys: boolean[] mas = new<br />

boolean[SKAICIUS];<br />

Elementai indeksuojami sveikais skaičiais<br />

nuo 0 iki SKAICIUS-1<br />

Jei vienas masyvas priskiriamas kitam, iš<br />

tikrųjų kopijuojama nuoroda į masyvą<br />

Deklaruojant masyvą, galima priskirti<br />

elementų reikšmes:<br />

pvz., int[] mas = {{2,2},{3,3}}.<br />

<strong>20<strong>10</strong></strong>.<strong>02</strong>.09 P.Kasparaitis. Objektinis programavimas. Įvadas 38

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!