1 paskaita. 2010 02 10 Įvadas
1 paskaita. 2010 02 10 Įvadas
1 paskaita. 2010 02 10 Įvadas
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