Professional Documents
Culture Documents
gaia
0
gaia
Javaprogramaziolengoaia
Sarrera gisakoa
Sarreragisakoa
Aurkezpenaren eskema
Aurkezpenareneskema
Hi
Historiapixkabat.Java,Interneterakolengoaia.
i i k b J
I
k l
i
Javaingurunea:programaziolengoaia,JVMeta
J k
Javakopaketeak.
k
k
Lengoaiarenoinarriak,ezaugarriorokorrak,
sintaxikontubatzuk...
i t ik t b t k
Bukatzeko
Helbideinteresgarriak,bibliografia.
Historia
SunMicrosystems enpresakgaratua,90.
hamarkadan: WriteOnce,RunAnywhere
Write Once Run Anywhere
Hastapenean,etxetresnaelektrikoak
programatzeko egun ia edozertarako
programatzeko,eguniaedozertarako.
Aplikazio etawebgune asko ezin dira Javainstalatuta
eduki gabe martxan jarri.
jarri
Smartphoneak,superkonputagailuak,bideokontsolak,
Internet...
Internet
Historia
Amaraunahedatuahala,Javaindartuzdoa
webekoaplikazioetarako.1995:Netscape
nabigatzaileakJavasostengatzendu.Hortik
bi
il k J
d H ik
aurreraInterneterakolengoaiatzathartuohida.
Printzipioak
Pi ti i k
Itshouldbe"simple,objectorientedandfamiliar"
It h ld b " b t d
Itshouldbe"robustandsecure"
"
Itshouldbe"architectureneutralandportable"
It should execute with "high
Itshouldexecutewith
highperformance
performance"
Itshouldbe"interpreted,threaded,anddynamic"
Java ingurunea
Javaingurunea
Javainguruneak hiruoinarrizkoelementu
ditu:
di
Javaprogramaziolengoaia.
Javamakinabirtuala(JVM).
Javaklaseenmultzoa.
Java klaseen multzoa
Javahelburuorokorrekolengoaiada.
Objektueiorientatua.
CetaC++lengoaienahaidea.
Konpilazioa
Adibide java
Adibide.java
Java kodea
javac
Konpiladorea
Adibide.class
byte-code
Java"makinabirtuala"
(JavaVirtualMachine)
Java"makinabirtuala"(JVM)
EdozeinmakinatanJavaprogramakeginlitezke,
etagerobesteedozeinetan(edo;)exekutatu.
B
Bestelengoaiabatzukerekonpiladaitezke
t l
i b t k
k
il d it k
JVMrako:jgnat(Ada>JVM).
java.lang
java
lang (haubetidagoikusgai,inportatubeharrikgabe)
(hau beti dago ikusgai inportatu beharrik gabe)
java.io
java.util
java.net
java.awt
java.applet
Exekuzioharianitzekoa(multithreaded)
E k i h i it k ( ltith d d)
Prozesuenegikaritzapenkonkurrenterakoaukeraematendu.
Interpretatua
Dinamikoa
Beharrasortuahalakargatzendituklaseakinterpretatzaileak.
Beharra sortu ahala kargatzen ditu klaseak interpretatzaileak
Arrayak(Ckoenantzera);bestalde,
Vector klaseaerebadago.
String klasea.
Lengoaia: elementuak
Lengoaia:elementuak
C etaC++ lengoaienitxura:
Iruzkinak:
Iruzkinak:
/* ... */ (blokekoak);
// (lerroabukatzendenartekoa)
Identifikadoreak:letrak,zenbakiaketaazpimarra(ezinzenbaki
d ifik d
k l
k
b ki k
i
( i
b ki
batezhasi)
Literalak:'a',"kaixo",345,0.0,true
,
,
,
,
...
Eragileak:= (asignazioa),== (berdin),!=,<,&&,|| ...
Banatzaileak:parentesiak,giltzak,koma,puntuetakoma...
Eragileak
Eragileak, lehentasunaren arabera ordenaturik
Eragileak
Lehentasuna
postfixuak
espr++ espr--
eragigai
g g bakarrekoak
biderkatzaileak
* / %
batutzaileak
+ -
erlazionalak
berdintza
== !=
AND logikoa
&&
OR logikoa
||
asignazioa
= +=
+ -= *= /
/= &
&=
Lengoaia: elementuak
Lengoaia:elementuak
Fluxukontrola:
Sententziabakuna; karaktereazbukatzenda:
balioBat = 3; // esleipena
balioBat++; // gehikuntza-sententzia
System.out.println("Kaixo"); // metodo-deia
Auto autoBat = new Auto(); // objektu-eraikuntza
Sententziakonposatua(sekuentzia,blokea)
giltzaarteanbildutakosententziensegida:{}
Baldintzazkoak.
Begiztak.
Lengoaia: elementuak
Lengoaia:elementuak
Baldintzasententziak:
if
if else
switch
Iterazioa:
while (<espresioboolearra>)
(<espresio boolearra>)
<sententziabakunaedokonposatua>
do
<sententzia bakuna edo konposatua>
<sententziabakunaedokonposatua>
while (<espresioboolearra>)
for (<hasieratzesententziak>;
<espresio boolearra>;
<espresioboolearra>;
<aldatzeespresioak>)
<sententziabakunaedokonposatua>
Lengoaia: if (adibideak)
Lengoaia:if
if (autoBat
(autoBat.abiadura())
abiadura()) > 130
130.00)
00)
System.out.println("Isuna");
if (a.balioa() > b.balioa()) {
//...
//
} else {
//...
//
}
Klaseak:
modulartasunarenoinarriaJavan
Kamioi motaerrepresentatzekoklasea:
p
public class Kamioi {
// objektu motaren ezaugarriak
private
i t i
int
t gurpilKopurua;
ilK
private double pisua;
// etodoa (eragiketak)
//metodoak
(e ag eta )
//eraikitzailea
public Kamioi (int n, double p) {...};
public int zenbatGurpil() {...};
public
bli d
double
bl zenbatekoPisua()
b t k Pi
() {
{...};
}
}
Klaseak:
modulartasunarenoinarriaJavan
Kamioi klasearenerabilera:
Kamioi k1
k1, k2; //objektuen (instantzien) erazagupena
k1 = new Kamioi(8, 10000.00); //objektu-eraikuntza
System out println (k1
System.out.println
(k1.zenbatGurpil()
zenbatGurpil() + " gurpil ditu";
Oharrak:
Besterikezean,parametrorikgabekoeraikitzailea dagoklaseorotan:
eremuakhasieratu,erreferentziabatlortu(erakuslea).
Parametrodun eraikitzaileren bat baldin badago ordea parametrorik
Parametroduneraikitzailerenbatbaldinbadago,ordea,parametrorik
gabekoaezdaautomatikokisortzen,eta,beraz,esplizitukieginbeharkoda.
Erazagupenak:oinarrizkomotak,
erreferentziak,konstanteak
Oinarrizkomotetakoaldagaietakonstanteak:
int i, j;
i
int
k = 300
300; //
//hasieratzea
i
erazagupenean
boolean handiagoa = false;
final double MAX = 1000.00; //konstantea
Erreferentziaaldagaiak(klasebateninstantziak):
String s;
Kamioi
i i k1
k1, k2
k2;
Auto a = new Auto(); //instantzia-eraikuntza
Erreferentziaaldagaiek
Erreferentzia aldagaiekobjektuarenhelbideagordetzen
objektuaren helbidea gordetzen
dute,ezbalioa!
Vector klaseaerebadago,etanormaleanerosoagodahura
klasea ere badago eta normalean erosoago da hura
erabiltzea.
Programanagusia:
main metodoa
import j
i
java.io.*;
i *
public class Nagusia {
public static void main(String[] args) {
...
}
}
main metodoaexekutatukoda,Nagusia
metodoa exekutatuko da Nagusia klaseaJVMk
klasea JVMk
interpretatzenduenean:
> java Nagusia.class
Metodoak:
nolaerazagutu,noladeitu
Funtzioak(emaitzaitzultzenduteetaespresioetatikeginohizaiedei):
i k(
i i l
d
i
ik i hi i d i)
//erazagupenak
public boolean handiago (Zatiki bestea) {...};
public Zatiki gehi (Zatiki bestea) {...};
//deiak (z1 eta z2 Zatiki dira)
if (z1.handiago(z2)) {...}
Zatiki batura = z1.gehi(z2);
Prozedurak(ezduteemaitzarikitzultzenetasententziagisaegitenzaiedei):
//erazagupenak
public void kamioiaHustu() {...};
public void inprimatu(String fitxategiIzena) {...};
//deiak (k1 Kamioi da eta z1 Zatiki da)
k1.kamioaHustu();
z1.inprimatu("emaitzak.txt");
http://java.sun.com
//
(ingelesez)
http://javaboutique.internet.com/ (ingelesez)
http://www.developer.com/java/ (ingelesez)
http://www.programacion.com/java/ (gaztelaniaz)
http://www.javahispano.com/ (gaztelaniaz)
http://www.monografias.com/trabajos/java/java.shtml
(
(gaztelaniaz)
l
)
Bibliografia
JJava2.IniciacinyReferencia
2 I i i i R f
i (2ed.).J.SnchezAllende,G.HuecasFernndezToribio,B.
(2 d ) J S h All d G H
F d T ibi B
FernndezManjn,P.MorenoDaz.Ed.McGrawHill,2005.
ProgramacinOrientadaaObjetosconJava. F.Durn,F.Gutirrez,E.Pimentel.Thomson,2007.
Program Development in Java B Liskov J Guttag AddisonWesley
ProgramDevelopmentinJava.B.Liskov,J.Guttag.Addison
Wesley,2001.
2001
DescubreJava1.2.M.Morgan(ed.).PrenticeHall.1998.
EllenguajedeprogramacinJava. Arnold,K.etal. AddisonWesley,2001.
Java 2. Manual de usuario y tutorial. A. Froufe. Ra
Ra-Ma,
Ma, 2000.
ProblemasresueltosdeprogramacinenlenguajeJava. PrezMenor,J.M.etal. Thomson,2003.
An introduction to Data Structures and Algorithms with Java. G.W. Rowe. Prentice-Hall, 1998.
EstructurasdedatosenJava. Weiss,M.A.AddisonWesley,2001.
TheJavaTutorial.SecondEdition.ObjectOrientedProgrammingfortheInternet.M.Campione&K.
Walrath.SunMicrosystems,1998.
1. gaia: Sarrera
Erreferentziak:
[Booch, 94] 1. eta 2. gaiak
[Meyer,
[Meyer, 99] 1. gaia
[Booch, 94] 4. gaia
Edukiak
2016-01-25
PMOO: Sarrera
Helburuak
Irakasgaiaren zergatia azaldu
Programa handiek planteatzen dituzten
zailtasunak azaldu: softwarearen krisia
Arazo hauek gainditzeko jarraitu behar
diren diseinu-metodoak aurkeztu
2016-01-25
PMOO: Sarrera
Txakurrarentzako txabola
egiteko, honako hauek
behar ditugu:
2016-01-25
PMOO: Sarrera
Pertsona bat
Plano txiki bat
Erreminta sinple batzuk
Materiala
...
2016-01-25
Pertsona bat
Plano txiki bat
Erreminta sinple batzuk
Materiala
...
PMOO: Sarrera
2016-01-25
Programa handiak
Oso problema konplexuak
Dokumentazio konplexua:
betebeharren identifikazioa,
zehaztapena, diseinua...
Talde
T ld bat
b behar
b h da
d
Kode-lerro asko
Aldatzeko zailak
=> Ingeniaritza-proiektu
h di k dit
handiek
dituzten
t arazoen
antzekoak
PMOO: Sarrera
2016-01-25
PMOO: Sarrera
2016-01-25
PMOO: Sarrera
2016-01-25
PMOO: Sarrera
PMOO: Sarrera
10
2016-01-25
PMOO: Sarrera
11
18
2000
53
23
1998
49
28
1995
31
28
46
40
1994
29
Porrota
Arazoak
Arrakasta
26
33
53
27
16
PMOO: Sarrera
12
2016-01-25
PMOO: Sarrera
13
SWaren bizitza
bizitza-zikloa
zikloa
Analisia
Moduluak
kodetu eta
integratu
Diseinua
Kodetzea &
Arazketa
(debugging-a)
Softwarea
sisteman
integratu
Probak
Ustiapena
p
eta
mantentzea
2016-01-25
PMOO: Sarrera
14
Bezeroak honela
azaldu du
Honela dokumentatzen
da lana
Proiektu-buruak
honela ulertu du
Analistak honela
diseinatu du
Programatzaileak
honela idatzi du
Marketingekoek
honela saltzen dute
Honela dabil
instalatutako bertsioa
Bezeroari hau
fakturatzen zaio
Hau da aurreikusitako
laguntza zerbitzua
htt // dd d il bl
http://addydavila.blogspot.com.es/2011/08/crisis-del-software.html
t
/2011/08/ i i d l ft
ht l
2016-01-25
PMOO: Sarrera
15
Programazio
P
i egituratuko
it t k teknikak
t k ik k
Datuen fluxu-diagramak
Obj kt t oinarritutako
Objektuetan
i
it t k metodologiak
t d l i k
Garapen-inguruneak
Aukeratutako programazio-lengoaiak
metodologia berriekin bat etorri behar du
2016-01-25
PMOO: Sarrera
16
Software ingeniaritza
Software-ingeniaritza
2016-01-25
PMOO: Sarrera
17
Software-ingeniaritza:
programen ezaugarriak
i k
Softwaregintzan aldaketa konstante bat da.
Aldaketen eragina gainditzeko, softwareak
honako ezaugarri hauek eduki behar lituzke:
Aldagarritasuna
Eraginkortasuna
g
Fidagarritasuna
Ulergarritasuna
2016-01-25
Software-ingeniaritzaren
Software
ingeniaritzaren
helburuak
PMOO: Sarrera
18
Aldagarritasuna
Sistemen aldaketa kontrolatua: zati batzuk
ukitu gabe beste batzuk aldatu behar dira
emaitza berriak lortzeko
Arrazoiak:
Eskakizun berriak
Akatsak
PMOO: Sarrera
19
Eraginkortasuna
Aplikazioak baliabideak modu hobeezin
batean erabili behar ditu
Denbora
D b
eta
t espazioa
i (memoria)
(
i )
Algoritmo batzuk beste batzuk baino
eraginkorragoak dira
Batzuetan ggehiegi
g zentratzen ggara
eraginkortasunean, diseinua albo batera utziz
Mikroeraginkortasuna vs makroeraginkortasuna
2016-01-25
PMOO: Sarrera
20
Fidagarritasuna
Zuzentasuna,, sendotasuna
Aplikazioak betebeharrak betetzen ditu,
espero den moduan
Errore posibleak aurreikusi eta saihestu,
garapenaren hasiera-hasieratik
Erroreen konponketa, sistema martxan dela
Ohikoak ez diren baldintzetan, aplikazioak
ondo
ondo erantzun behar du
Salbuespenak
2016-01-25
PMOO: Sarrera
21
Ulergarritasuna
Diseinuak eta kodeak ulergarriak izan behar dute
Behe-mailan: kodeketa-estiloa
Goi-mailan: algoritmoak
g
eta datu-egiturak
g
bereizi behar
2016-01-25
PMOO: Sarrera
22
Software-ingeniaritzaren
Software
ingeniaritzaren oinarriak
1.
2.
3
3.
4.
Abstrakzioa
Informazio-ezkutatzea
Modulartasuna eta lokalizazioa
Bestelakoak
2016-01-25
PMOO: Sarrera
23
Abstrakzioa
Funtsezko ezaugarriak
g
hartu eta funtsezko
ez direnak gerorako utzi
Datuetan eta algoritmoetan aplikatzen da
Abstrakzio-maila bakoitzean datu-mota
abstraktu batzuk (DMA) identifikatuko
ditugu; horrela konplexutasuna txikitzen da,
aplikazioa ulergarriagoa eta mantentzeko
errazagoa eginez
2016-01-25
PMOO: Sarrera
24
Abstrakzioa
Abstrakzioa
Ab k i hainbat
h i b
mailatan gauzatzen da
Abstrakzio-maila
Ab t k i
il
bakoitzean DMA
batzuk identifikatuko
ditugu
DMA horien
i l
inplementazioa,
i
xehetasunak...
g
beheragoko
mailetarako utziko
ditugu
2016-01-25
PMOO: Sarrera
25
Informazio ezkutatzea
Informazio-ezkutatzea
Modulu bakoitzean, sistemaren gainontzeko moduluek
b h ez dituzten
behar
di
xehetasunak
h
k ezkutatzea
k
da
d informazioi f
i
ezkutatzearen helburua
Adibid
Adibidez, prozedura
d
bbatek
k erabiltzen
bil
dituen
di
aldagai
ld i
lokalak kanpotik ez dira ikusi behar; ezta datu-mota
abstraktu bat nola dagoen inplementatuta (zer datu-egitura
erabiliz) ere
Onurak:
Ulergarritasuna handitu
Aldagarritasuna handitu
Fidagarritasuna handitu
2016-01-25
PMOO: Sarrera
26
Informazio-ezkutatzea
2016-01-25
PMOO: Sarrera
27
Abstrakzioa eta
informa io e k tat ea
informazio-ezkutatzea
2016-01-25
PMOO: Sarrera
28
PMOO: Sarrera
29
M5
2016-01-25
M3
M6
M4
M7
PMOO: Sarrera
M8
TOP-DO
OWN
M2
BO
OTTOM-U
UP
Abstrakzio
A
oa
M1
M9
30
PMOO: Sarrera
31
PMOO: Sarrera
32
Bestelakoak
Uniformetasuna: kodetzean ggida batzuk
erabiliz
Programatzeko estilo ona
Ulergarritasuna
PMOO: Sarrera
33
Bestelakoak
Hedagarritasuna
g
Aplikazioa hedatu behar denean, softwareak
modu erraz batean onartu behar ditu aldaketak
Berrerabilgarritasuna
Modulu bat hainbat aplikaziotan erabil
dezakegu
Bateragarritasuna
Software edo plataforma desberdinetarako
baliagarria da egindakoa
2016-01-25
PMOO: Sarrera
34
Bestelakoak
Eramangarritasuna
Aplikazioa beste ingurune batera eramateko gaitasuna
Erabilerraztasuna
Instalatzeko, maneiatzeko eta gainbegiratzeko
erraztasuna
Segurtasuna
Konputagailua erasotzeko ahuleziak ez edukitzea
Arazoak gertatzen badira, informazioa ez galtzea
Sendotasuna
Ustekabekoen aurrean modu egokian erantzutea
2016-01-25
PMOO: Sarrera
35
PMOO: Sarrera
36
--------------- Datu-egituretan
Datu egituretan oinarritutako diseinua
Objektuei orientatutako diseinua
2016-01-25
PMOO: Sarrera
37
Beheranzko diseinua
2016-01-25
PMOO: Sarrera
38
Datu-egituretan
Datu
egituretan oinarritutako diseinua
Datuetan zentratzen da
dira, eta gero
Lehenbizi datuak definitzen dira
sistemaren arkitektura eta programak garatzen
dira
di
g
Horiei dagozkien
g
eragiketak
g
Datu-egiturak
2016-01-25
PMOO: Sarrera
39
PMOO: Sarrera
40
Programazio lengoaiak
Programazio-lengoaiak
Software-ingeniaritzan aritzeko prestaturik daude lengoaia
b i k
berriak
Ada:
Objektuetan oinarritutako programazioa eta objektuei
orientatutako programazioa
Abstrakzioa, modulartasuna, informazio-ezkutatzea...
informazio ezkutatzea...
Software segurua eta denbora errealekoa garatzeko egokia.
Software berrerabilgarria sortzeko egokia
Java:
Objektuei orientatutako programazioa
Abstrakzioa, modulartasuna, informazio-ezkutatzea...
Interneterako erabilgarria izateko sortua: web-aplikazioak
garatzeko erraztasunak
2016-01-25
PMOO: Sarrera
41
Programazio-lengoaia ez da dena,
b i askotan
baina
k
lagun
l
dezake...
d k
M
Mars
Cli t (1999)
Climate
http://en.wikipedia.org/wiki/Mars_Climate_Orbiter
Adibide gehiago:
http://hub4techie.com/wodpress/2012/09/software-crisis/
2016-01-25
PMOO: Sarrera
42
Programazio-lengoaiak
og a a o e goa a historian
sto a zehar
e a
Programazio-lengoaien bilakabidea, modulartasunari
dagozkion zenbait ezaugarriren arabera
Lehen belaunaldia (1954-1968)
FORTRAN I
ALGOL 58
Flowmatic
IPL V
espresio matematikoak
FORTRAN II:
ALGOL 60:
COBOL:
LISP:
2016-01-25
PMOO: Sarrera
44
Programazio-lengoaiak
og a a o e goa a historian
sto a zehar
e a
Hirugarren
g
belaunaldia ((1962-1970))
PL/1:
FORTRAN+ALGOL+COBOL
ALGOL 68: ALGOL 60-ren ondorengoa (zehatz-mehatz)
Pascal:
ALGOL 60-ren ondorengoa (neurri handi batean)
Si l
Simula:
klaseak,
kl
k datu-abstrakzioa
d
b k i
1980ko hamarkada
Ada (1983/1995/2005/2012): paketeak, generikoak, mota pribatuak, mota
etiketatuak herentzia,
etiketatuak,
herentzia dispatching-a
dispatching a
C++: klaseak, template-ak, herentzia anizkoitza
Java: klaseak, paketeak, interfazeak, herentzia, dispatching-a
Eiffel: objektuei orientatutako lengoaia purua
PMOO: Sarrera
45
2. gaia: Modulartasuna
Erreferentziak:
[Bell et al.,
al 92] 5
5. kapitulua
[Meyer, 99] 3. kapitulua
[Booch, 94] 11. kapitulua
[C h
[Cohen,
96] 10.,
10 11
11. eta 13
13. kkapituluak
i l k
[Durn et al., 07]
Edukiak
Oinarrizko kontzeptuak: definizioa, kapsulaketa,
informazio-ezkutatzea
Datu-mota
D t
t abstraktuak
b t kt k (DMA)
Egoera-makina abstraktuak (EMA)
UML:
UML klase-diagramak
kl
di
k eta
t klase
kl
arteko
t k d
dependentzia
d t i
Modulartasuna eta kapsulaketa Adan eta Javan
Modulartasuna:
M d l t
paketeak
k t k (Ada)
(Ad ) eta
t klaseak
kl
k (Java)
(J
)
Pribatutasuna
Konpilazio-ereduak:
Konpilazio ereduak: liburutegi-unitateak
liburutegi unitateak Adan
2016-01-28
PMOO: Modulartasuna
Modulartasuna
Modulartasunaren kontzeptua
p
aurkeztu,,
kapsulaketarekin batera. Programa handiak
garatzeko ezinbestekoak dira biak.
g
Aplikazio handiak nola modularizatzen diren
aztertu eta bere abantailak ikusi.
Datu-mota abstraktuen kontzeptua azaldu,
aurreko bi kontzeptuekin
p
lotuz.
Ada eta Java lengoaiek modulartasuna eta
kapsulaketa
p
bermatzeko eskaintzen dituzten
baliabideak aurkeztu.
2016-01-28
PMOO: Modulartasuna
Korrespondentzia zuzena
Problemaren egitura
g
modulu-egituran
g
islatu behar da
Problemaren espazioan
p
agertzen
g
diren
elementuek agertu behar dute soluzioaren
(programaren) espazioan ere
2016-01-28
PMOO: Modulartasuna
Mendekotasuna (dependentzia):
Moduluek beste modulu batzuen beharra dute,
beste modulu batzuen mendeko dira
Modulu arteko dependentzia-erlazio horiek
irudikatuko dute p
programaren
g
arkitektura
2016-01-28
PMOO: Modulartasuna
Interfazea - Dependentziak
p
2016-01-28
PMOO: Modulartasuna
PMOO: Modulartasuna
Nola
N l llortu
t argitasuna?
it
?
Algoritmorik sinpleenak hobetsi
Iruzkinak idatzi, dokumentatu
Programatzen... dotore izan behar da
2016-01-28
PMOO: Modulartasuna
2016-01-28
PMOO: Modulartasuna
Informazio ezkutatzea
Informazio-ezkutatzea
Moduluaren diseinatzaileak aukeratu behar
2016-01-28
PMOO: Modulartasuna
10
Datu-Mota
Datu
Mota Abstraktuak
DMA bat balio eta eragiketa multzo
bat da. Balio eta eragiketa horiek
espezifikazio independente baten
bitartez definitzen dira
Datu-mota: balio onargarri multzo bat eta
bere eragiketak
Oinarrizkoak: Integer, Character
Egituratuak: array, record
2016-01-28
PMOO: Modulartasuna
11
Datu-Mota
Datu
Mota Abstraktuak
Datuen errepresentazioa
p
eta eragiketen
g
inplementazioa ezkutatzen da
Eragiketen inplementazioa azpiprogramen bidez
gauzatzen
t
da
d
2016-01-28
PMOO: Modulartasuna
12
Datu-Mota
Datu
Mota Abstraktuak
DMAen osagaiak:
Motaren zehaztapena
Sintaxia: motaren izena,
izena eragiketen izenak
(parametroak eta emaitzen mota)
Semantika: eragiketen portaera
Inplementazioa
E
Errepresentazioa:
t i
DMA
DMA-aren
egitura,
it
oinarrizko
i
i k
motetan eta beste DMA batzuetan oinarrituta
Algoritmoak: eragiketen inplementazioa
2016-01-28
PMOO: Modulartasuna
13
Datu-Mota
Datu
Mota Abstraktuak
DMA batek abstrakzio bat
errepresentatzen du
Zehaztapenaren detaileak nabarmentzen
dira
di
Inplementazioaren detaileak ezkutatzen
dira
2016-01-28
PMOO: Modulartasuna
14
Datu-Mota
Datu
Mota Abstraktuak
2016-01-28
HUTSA:
JARRI: NATSEG x NAT
KATEATU: NATSEG x NATSEG
LEHENENGOA: NATSEG
GAINERAKOA: NATSEG
LUZERA: NATSEG
ALDERANTZIZKOA NATSEG
ALDERANTZIZKOA:
NATSEG
NATSEG
NATSEG
NAT
NATSEG
NAT
NATSEG
PMOO: Modulartasuna
15
Datu-Mota
Datu
Mota Abstraktuak
Zehaztapen semantikoa:
HUTSA: segida hutsa sortzen du
JARRI (S,N): N jartzen du segidaren hasieran
KATEATU (S1, S2): S1 eta S2 segidak kateatzen ditu
LEHENENGOA (S): S segidako lehenengo zenbakia lortzen
du
GAINERAKOA (S): S segida lehenengo zenbakirik gabe
lortzen du
LUZERA (S): S segidaren luzera lortzen du
ALDERANTZIZKOA (S): S segidako elementuak
alderantzizko ordenan jarrita sortutako segida lortzen du
2016-01-28
PMOO: Modulartasuna
16
Datu-Mota
Datu
Mota Abstraktuak
Errepresentazioa: inplementazio
estatikoa
Max: constant Positive := 100;
type Segida is array (1 .. Max) of
Natural;
type Natseg is
i record
d
Elementuak: Segida;
Zenbat: Natural range 0 .. Max;
end record;
2016-01-28
PMOO: Modulartasuna
17
Datu-Mota
Datu
Mota Abstraktuak
Errepresentazioa:
p
inplementazio
p
dinamikoa
(erakusle bidezkoa):
type Nat_Nodo;
type Natseg is access Nat_Nodo;
Nat Nodo;
type Nat_Nodo is record
Elementua: Natural;
Hurrengoa: Natseg;
end record;
2016-01-28
PMOO: Modulartasuna
18
Datu-Mota
Datu
Mota Abstraktuak
Algoritmoak: inplementazioa
errepresentazioaren menpe dago
procedure Hutsa (S: out Natseg);
f
function
i
Hutsa return Natseg;
procedure Jarri (S: in out Natseg;
N: in Natural);
function Jarri (S: in Natseg;
N: in Natural) return Natseg;
2016-01-28
PMOO: Modulartasuna
19
Zergatik
g
g
gertatzen da hori?
Soluzioa:
Datu-mota abstraktu gisa inplementatu, errepresentazioa ezkutatuz, eta datekin egitea nahi
dugun eragiketak (soilik) publiko eginez.
2016-01-28
PMOO: Modulartasuna
20
2016-01-28
PMOO: Modulartasuna
21
2016-01-28
PMOO: Modulartasuna
22
2016-01-28
PMOO: Modulartasuna
23
PMOO: Modulartasuna
ikasleak.adb
24
2016-01-28
PMOO: Modulartasuna
25
objektuak,
with Ikasleak, Taldeak, Notak;
procedure Proba
Proba_Ikasleak
Ikasleak is
programa
I1, I2 : Ikasleak.Ikasle;
bezeroan
T : Taldeak.Talde;
N : Notak.Nota;
begin
Taldeak.Sortu ("SIIT46", T);
Notak.Sortu (4.5, N);
Ikasleak.Sortu ("Miriam", T, I1);
Ikasleak Sortu (
Ikasleak.Sortu
("Xabier"
Xabier , T,
T I2);
--...
Ikasleak.Esleitu_Nota (I1, N);
Ada.Text_IO.Put (Ikasleak.Izena (I1) & " ikaslearen nota: ");
Ada Float Text IO Put
Ada.Float_Text_IO.Put
(Ikasleak.Nota (I1), Fore => 2, Aft => 1, Exp => 0);
--...
end Proba_Ikasleak;
proba_ikasleak.adb
2016-01-28
PMOO: Modulartasuna
26
Egoera-Makina
Egoera
Makina Abstraktuak
(singleton)
Objektua bera kapsulatuta dago; ikusezina
da moduluaren erabiltzailearentzat.
Objektuaren egoera (balioa)
(balioa), une konkretu
bakoitzean, moduluan bertan gordetzen da
Eragiketak
E ik t k bakarrik
b k ik esportatzen
t t
di
dira ((motarik
t ik
ez)
2016-01-28
PMOO: Modulartasuna
27
EMA a: adibidea
EMA-a:
-- E
Erasmusekoen
k
ik
ikasgela,
l
objektu-abstrakzioa:
bj kt
b t k i
egoera-makina
ki
abstraktua
b t kt
(EMA)
with Ikasleak, Taldeak, Notak; --inportazioa (mendekotza)
package Erasmus_Ikasgela is
-- ez du motarik esportatzen
-- hasieratzea
procedure Kargatu_Fitxategitik;
-- kontsulta
function Ikaslerik_Onena return Ikasleak.Ikasle;
function Zenbat
Zenbat_Ikasle
Ikasle return Natural;
-- aldaketa
procedure Ikaslea_Gehitu (I : in Ikasleak.Ikasle);
procedure Ordenatu;
end Erasmus_Ikasgela;
erasmus_ikasgela.ads
2016-01-28
PMOO: Modulartasuna
28
EMA a: adibidea
EMA-a:
with Ada.Text_IO; --inplementaziorako premiak
package body Erasmus_Ikasgela is
-- objektu kapsulatua (gehi gainerako barne-aldagaiak,
-- eta beharrezko motak)
type Ikasle50 is array (Positive range 1 .. 50) of Ikasleak.Ikasle;
Ikasleak Ikasle;
type Ikasgela_Mota is
record
Ikasleak : Ikasle50;
Zenbat : Natural range 0 .. 50;
end record;
-- hauxe da pakete honetako objektu kapsulatua:
objektu
j
Ikasgela : Ikasgela_Mota;
kapsulatua
Fitxategi_Izena : String := "erasmus.txt";
--...
erasmus_ikasgela.adb
2016-01-28
PMOO: Modulartasuna
29
EMA a: adibidea
EMA-a:
-- eragiketok objektu kapsulatuaren gainean egiten dute lan
procedure Kargatu_Fitxategitik is
begin
-- eratu Ikasgela erregistroa, datuak fitxategitik irakurriz
-- ordenatu array-a, notaren arabera (adibidez)
-- ... (inplementatzeko dago)
end Kargatu_Fitxategitik;
function Ikaslerik_Onena return Ikasleak.Ikasle is
begin
return Ikasgela.Ikasleak (1); -- ordenatuta dago
end Ikaslerik_Onena;
function Zenbat_Ikasle return Natural is
begin
return Ikasgela.Zenbat;
end Zenbat_Ikasle;
--...
erasmus_ikasgela.adb
2016-01-28
PMOO: Modulartasuna
30
EMA a: adibidea
EMA-a:
procedure Ikaslea_Gehitu (I : in Ikasleak.Ikasle) is
begin
Ikasgela.Ikasleak (Ikasgela.Zenbat + 1) := I;
Ikasgela Zenbat := Ikasgela
Ikasgela.Zenbat
Ikasgela.Zenbat
Zenbat + 1;
end Ikaslea_Gehitu;
procedure Ordenatu is
begin
-- ordenatu array-a
null;
end Ordenatu;
erasmus_ikasgela.adb
end Erasmus_Ikasgela;
2016-01-28
PMOO: Modulartasuna
31
EMA a: adibidea
EMA-a:
---------------------------------------------------------------- Erasmus_Ikasgela paketearen erabilera-adibidea
-with Erasmus_Ikasgela, Ikasleak, Taldeak;
with Ada.Text_IO;
procedure Proba_Erasmus_Ikasgela is
I1 : Ikasleak.Ikasle;
T : Taldeak.Talde;
N : Notak.Nota;
begin
-- Erasmus_Ikasgelako eragiketen deietan ez da ageri ikasgela bera
-- errepresentatzen duen objekturik argumentu gisa
Erasmus_Ikasgela.Kargatu_Fitxategitik;
-- ikasle berri bat sortu, eta nota esleitu
Taldeak.Sortu ("SIIT46", T);
Notak.Sortu (8.5, N);
Ikasleak.Sortu ("Miriam", T, I1);
Ikasleak.Esleitu_Nota (I1, N);
Erasmus_Ikasgela.Ikaslea_Gehitu (I1);
Erasmus_Ikasgela.Ordenatu;
Ada.Text_IO.Put_Line (Ikasleak.Izena (Erasmus_Ikasgela.Ikaslerik_Onena));
end
d Proba_Erasmus_Ikasgela;
b
k
l
proba_erasmus_ikasgela.adb
2016-01-28
PMOO: Modulartasuna
32
I : Integer := 50;
50
Ikasle_Bat : Ikasleak.Ikasle;
Ikasle_Bat
Ikasle
Bat aldagaia da
da, objektua
objektua, balio baten edukiontzia
Ikasleak.Ikasle, berriz, mota da (DMA-a): balioa nolakoa den eta
berarekin zer egin daitekeen (Ikasleak paketeak kapsulatzen ditu
motaren
t
erazagupena eta
t motako
t k objektuekin
bj kt ki egin
i daitezkeen
d it k
eragiketak)
ik t k)
Erasmus_Ikasgela EMA paketea, azkenik, aldagai baten antzera erabil
dezakegu: balio baten edukiontzia da, eta kapsulatzen duen paketeak
ematen dizkigu eragiketak, hau da, objektuarekin zer egin daitekeen
(eragiketak)
2016-01-28
PMOO: Modulartasuna
33
Paketeak
Datu
Datu-mota
mota pribatuak eta mugatuak
2016-01-28
PMOO: Modulartasuna
34
Modulartasuna Adan
Paketeak
Izendun programa-unitateak
Osagaiak: datu-motak,
datu motak, azpiprogramak, interfazea
Abantailak:
2016-01-28
PMOO: Modulartasuna
35
Modulartasuna Adan:
paketeak
Egitura
Espezifikazioa:
Paketearen espezifikazio publikoa: motak,
objektuak eta azpiprogramak
Alde pribatua (ezkutuan)
Gorputza:
G
t
Paketearen gorputza (ezkutuan gelditzen da):
espezifikazioko eragiketa publikoen inplementazioa
azpiprograma lagungarriak
bestelako erazagupen pribatuak (motak
(motak, aldagaiak
aldagaiak...))
2016-01-28
PMOO: Modulartasuna
36
Paketeen sintaxia
package <izena> is
{<erazagupenak: espezifikazioa>}
[p
[private
ate
{< erazagupenak >}]
end [<izena>];
package
k
b
body
d <izena>
i
i
is
{<erazagupenak: inplementazioa>;}
[ g
[begin
{<sententzia sekuentzia>}]
end [<izena>];
2016-01-28
PMOO: Modulartasuna
37
Datu-abstrakzioko
Datu
abstrakzioko paketeak
DMA-ak
DMA ak inplementatzeko
Datu-mota definitzen da, eta bai
h
honekin
ki egin
i d
daitezkeen
it k
eragiketak
ik t k ere
Datu-motaren egitura pribatua da
Prozedurak eta funtzioak erabiltzen dira
DMA-aren eragiketak
g
inplementatzeko
p
Paketearen gorputzean ezkutatzen da
eragiketon inplementazioa
2016-01-28
PMOO: Modulartasuna
38
Datu-abstrakzioko
Datu
abstrakzioko paketeak
package Konplexuak is
type Konplexu is
record
Erreala : Float;
Irudikaria : Float;
end record;
function Berria (R1, R2 : in Float)
return Konplexu;
function Batura (C1, C2 : in Konplexu)
return Konplexu;
function Biderkadura (C1,
(C1 C2 : in Konplexu)
return Konplexu;
-- ...
end Konplexuak;
2016-01-28
PMOO: Modulartasuna
39
package Konplexuak is
type Konplexu
K
l
i private;
is
i
I : constant Konplexu; --konstante diferitua
function Berria (R1, R2 : in Float)
return Konplexu;
function Batura (C1, C2 : in Konplexu)
return Konplexu;
function Biderkadura (C1, C2 : in Konplexu)
ret rn Konplexu;
return
private
type
yp Konplexu
p
is
record
Erreala : Float;
I dik i : Float;
Irudikaria
Fl t
end record;
I : constant Konplexu
p
:= (
(0.0,
, 1.0);
)
end Konplexuak;
konplexuak.ads
2016-01-28
PMOO: Modulartasuna
40
package Pilak is
type Pila is private;
function Berria return Pila;
procedure Pilaratu (P1 : in out Pila; X : in Character);
procedure Despilatu (P1 : in out Pila; X : out Character);
private
i t
Max : constant := 100;
type Taula is array (1 .. Max) of Character;
type Pila is
record
Info : Taula;
Gailurra : Integer range 0 .. Max;
end record;
end Pilak;
pilak.ads
package body Pilak is
end
e
d Pilak;
a ;
eragiketen
inplementazioa
2016-01-28
pilak.adb
PMOO: Modulartasuna
41
Datu-mota pribatuak
eta mugatuak
Datu-mota pribatu eta pribatu mugatuak
erazagutuz, programatzaileak beren
ikusgaitasuna kontrolatzen du
Datu-mota
mota hauek beren inplementazioa
Datu
ezkutatzen dute
private atalean erazagutzen dena
paketean bertan bakarrik erabil daiteke
Ez baditugu objektuak pribatu gisa erazagutzen
erazagutzen,
kanpotik atzi eta alda daitezke arazoak ekar
ditzake honek
2016-01-28
PMOO: Modulartasuna
42
Datu-mota p
pribatuetako objektuekin
j
egin
g
daitezkeenak (kanpoan):
PMOO: Modulartasuna
43
Datu-mota p
pribatu mugatuetako
g
objektuekin
j
egin daitezkeenak (kanpoan):
Azpiprogramen
pp g
p
parametro g
gisa erabili
Funtzio baten emaitza izan
Esportatzen diren eragiketak (publikoak)
BAINA EZ: esleipena, = eta /=
Ondorioak
Aldagaiak paketean bakarrik hasieratzen dira
Besterik ezeko baliodun parametroak ez dira
onartzen
Programatzaileak guztiz kontrolatzen du paketea
2016-01-28
PMOO: Modulartasuna
44
bi eragiketa
horiek eskaini
beharra dago,
mota mugatuak
erabiliz gero
package Pilak is
type Pila is limited private;
procedure Sortu_Berria (P : out Pila);
procedure Pilaratu (P1 : in out Pila; X : in Character);
procedure Despilatu (P1 : in out Pila; X : out Character);
function Berdin (P1, P2: in Pila) return Boolean;
procedure Kopiatu (P1: out Pila; P2: in Pila);
private
type Nodo;
type Pila is access Nodo; --dinamikoki inplementatua
type Nodo is
record
Info : Osagai;
Hurrengoa : Pila;
end record;
end Pilak;
pilak.ads
package body Pilak is
eragiketen
g
inplementazioa
end
d Pilak;
il k
2016-01-28
PMOO: Modulartasuna
pilak.adb
45
Objektu-abstrakzioko
p
paketeak
Egoera-Makina Abstraktuak (EMA)
inplementatzeko
Objektua bera kapsulatuta dago
Objektuaren egoera (balioa) une konkretu bakoitzean
paketean gordetzen da
Eragiketak bakarrik esportatzen dira (motarik ez)
DMAekin ez bezala, EMA bat erabiltzen duen
aplikazioak objektu bakarra erabiliko du; ezin du
mota horretako aldagairik sortu
"mota"
Ikus dezagun beste adibide bat!: Pila EMA-a.
2016-01-28
PMOO: Modulartasuna
46
package Pila
procedure
procedure
procedure
end
d Pila;
i
is
Sortu Berria;
Sortu_Berria;
Pilaratu (X : in Character);
Despilatu (X : out Character);
pila.ads
2016-01-28
PMOO: Modulartasuna
47
eragiketen
inplementazioa,
objektu
kapsulatuaren
gainean
"gainean
eragiten dutela
PMOO: Modulartasuna
pila.adb
48
Zer eragin
Z
i d
dute
t Ad
Ada paketeek
k t k
identifikadoreen ikusgaitasunean eta beren
esparruan?
?
2016-01-28
PMOO: Modulartasuna
49
2016-01-28
with P; use P;
procedure P1 ...;
...
I := ...;
...
PMOO: Modulartasuna
50
2016-01-28
PMOO: Modulartasuna
51
2016-01-28
PMOO: Modulartasuna
52
(a)
(b)
(c)
procedure Put_Matrix
(M:in
(M
in Matrix) is
begin
...
end put Matrix;
function Matrix_Product
(Ml,M2:Matrix) return Matrix is
P : Matrix
M t i (...,
(
...);
);
begin
... return P;
end Matrix_Product;
begin
Get_Matrix (A);
Get_Matrix (B);
C:= Matrix_Product (A,B);
Put_Matrix (C);
end;
end Multiply_Matrices;
Ikusgaitasunerregelak
g
Lerro etenek adierazten
dute non ez diren
zuzenean ikusgai
identifikadoreak
(a) M-ren ikusgaitasuna
(globala))
(g
(b) Matrix motaren
ikusgaitasuna
(c) Get_Matrix-en
ikusgaitasuna
(a) Ikusgaitasun-
erregelak
(b)
(c)
(a) Izenak-en
ikusgaitasuna
(b) Sartu-ren
ikusgaitasuna
(c) Zerrenda-ren
ik
ikusgaitasuna
i
package A is
...
X-ren erazag.
Y ren erazag.
Y-ren
erazag
...
endd A;
e
;
( )
(a)
(b)
Ikusgaitasunerregelak
package B is
...
Y-ren erazag.
Z ren erazag.
Z-ren
erazag
...
end B;
...
with A,B; use A,B;
Z-ren erazag.
(c)
(d)
(e)
Eragiketak:
eraikitzailea
kontsulta-eragiketak (zenbakitzailea, izendatzailea)
eragiketa aritmetikoak eta
erlazio-eragiketak (+, *, /... =, /=, < ...)
sinplifikatua...
p
2016-01-28
PMOO: Modulartasuna
56
Klaseak (Adako
(
paketeen kidekoak))
Informazio-ezkutatzea (ikusgaitasuna, oro
har)) modifikatzaileen bidez gauzatzen
g
da:
private, protected, public...
2016-01-28
PMOO: Modulartasuna
57
2016-01-28
PMOO: Modulartasuna
58
eguna,
g
,
hila
urtea.
Datak maneiatzeko
maneiatzeko, eragiketa
edo metodo batzuk behar
dira:
2016-01-28
class Data {
private int eguna;
private int hila;
private int urtea;
//. . .
public Data(int e, int h, int u)
{...}
public int egunKop(Data bestea)
{
{...}
}
public int urtea()
{...}
//
//...
}
Data.java
PMOO: Modulartasuna
59
class Data {
private int eguna;
private int hila;
private int urtea;
//. . .
public Data(int e, int h, int u)
public int egunKop(Data bestea)
public int urtea()
//...
}
{...}
{...}
{...}
Data.java
interfazea
(publikoa)
2016-01-28
PMOO: Modulartasuna
60
2016-01-28
PMOO: Modulartasuna
61
package p1;
package p1;
class Klasea1 {
2016-01-28
PMOO: Modulartasuna
63
2016-01-28
PMOO: Modulartasuna
64
2016-01-28
PMOO: Modulartasuna
65
2016-01-28
PMOO: Modulartasuna
67
Kideen modifikatzaileak:
aldagaiak eta konstanteak
<kide-konstantea>::=
final:
eremua bada: konstante bat da.
metodoa bada: ezin da azpiklaseetan birdefinitu
birdefinitu.
2016-01-28
PMOO: Modulartasuna
68
Informazioaren ezkutatzea:
ikusgaitasuna (laburbilduz...)
Klaseak publiko erazagut daitezke (public) edo
package
k
ik
ikusgaitasun-mailarekin
it
il ki ((pakete
k t b
bereko
k
beste klaseetatik baino ikusten ez direla); klase
pribatuak ere definitzen ahal dira (beste batzuen
barruan, eskuarki).
Aldagai kideak (klaseko aldagaiak) eta metodoak
(eragiketak) public, private, protected edo
package izan daitezke.
2016-01-28
PMOO: Modulartasuna
69
klase-izena
klase
izena bada: klase horretako objektu baten erreferentzia (instantzia)
Datu-eremua
Datu
eremua (aldagaia)
2016-01-28
PMOO: Modulartasuna
70
g
eremu ez-estatiko g
guztien kopia
p bat
Klase horretan erazaguturiko
sortzen da instantzian.
2016-01-28
PMOO: Modulartasuna
71
2016-01-28
PMOO: Modulartasuna
72
abiadura
abiaduraMax
System.out.println
(
(a.matrikula
t ik l + " autoa
t
" + a.abiadura
bi d
+
abiaduran doa.");
2016-01-28
PMOO: Modulartasuna
73
Metodoak
Klase bateko metodoek klase horretako objektuek
j
egin
g
ditzaketen eragiketak (funtzionalitatea) definitzen dituzte.
Metodoa: sententzia-sekuentzia bat.
Parametroak: metodoaren argumentuak.
p
balioz beti ((kopia);
p ); baina kontuz,,
Parametro-pasea:
oinarrizko motak ez direnetan (erreferentzia- edo objektumotetan), helbidea da kopiatzen dena!!!
M
Metodoen
t d
barruan
b
ere erazagutt d
daitezke
it k b
barne-klaseak
kl
k
(habiaratuak).
void: "prozedura"
p
dela adierazten du,, ez baitu inongo
g
baliorik itzultzen emaitza gisa (bestela, "funtzioa" da).
2016-01-28
PMOO: Modulartasuna
74
2016-01-28
PMOO: Modulartasuna
75
Metodoak
Metodoa "funtzioa" denean, return sententzia
bat izan behar du bere gorputzean.
Metodo bati deitzeko, dagokion objektuaren
izena jjarriko zaio aurretik ((objektu
j
horrek
"jasotzen du mezua"):
<objektuaren-izena>.<bere-klaseko-metodoaren-izena>
j
PMOO: Modulartasuna
76
Metodoak
class Auto {
private String matrikula;
this uneko objektua da, hau da,
private double abiadura;
private double abiaduraMax;
bizkortuMax eragiketa egiten/jasaten ari
// bizkortu topera
dena
void bizkortuMax() {
this abiadura = this
this.abiadura
this.abiaduraMax;
abiaduraMax;
}
Hala ere, kasu honetan ez da
//...
ezinbestekoa this erabiltzea:
}
Auto java
Auto.java
abiadura=abiaduraMax;
2016-01-28
PMOO: Modulartasuna
77
Metodoak
Auto a = new Auto();
a.matrikula = "SS-4324-BD";
a.abiadura = 70.0;
a.abiaduraMax = 123.45;
System.out.println(a.matrikula + " autoa " + a.abiadura +
" abiaduran doa.");
a bizkortuMax();
a.bizkortuMax();
System.out.println(a.matrikula + " autoa " + a.abiadura +
" abiaduran doa.");
PMOO: Modulartasuna
78
Metodoak: gainkarga
class Puntu {
private double x;
private double y;
void print() {
System.out.println("Puntua: " + this.x + "," + this.y);
}
void print(int n) {
for (int i = 0; i < n; i++) {
System.out.println("(" + this.x + "," + this.y + ")");
}
}
}
Puntu.java
2016-01-28
PMOO: Modulartasuna
79
Objektu
Obj
kt bat
b t eraikitzean
ikit
(instantzia
(i t t i dinamikoki
di
ik ki sortzean)
t
)
aldagai/metodo ez-estatiko bakoitzaren kopia bat sortzen da
(instantzian, objektuan).
2016-01-28
PMOO: Modulartasuna
80
Adibidea: static
public class K {
private static int zenbatInstantzia = 0;
private char c; //eremu hau instantziek edukiko dute
public K() {
c = '';
;
zenbatInstantzia++;
}
public static int zenbatAle() {return zenbatInstantzia;}
}
K.java
2016-01-28
PMOO: Modulartasuna
81
System.out.println
e1.setPisua(new Float(89.3));
public Float getPisua() {
return pisua;
System.out.println("1. erabiltzailearen pisua: " +
}
2016-01-28
PMOO: Modulartasuna
82
PMOO: Modulartasuna
Ikasle.java
83
PMOO: Modulartasuna
Ikasle.java
84
2016-01-28
PMOO: Modulartasuna
85
EMA-ak
EMA
ak Javaz: singleton patroia
DMAek ez bezala, EMA baten eragiketak objektu bakar
baten gainean egiten dira. Ezin dira klase horretako
instantziak egin
egin.
Singleton patroia erabiliz idazten dira EMA-ak Javaz.
Singleton patroia:
Eraikitzaileak pribatua izan behar du (klasearen instantziak
egitea
g
eragozteko)
g
)
Atributuak klase mailakoak izango dira (static)
Metodoek klasearen barruko objektu kapsulatuaren gainean
izango dute eragina
eragina, eta hauek ere estatikoak izango dira
2016-01-28
PMOO: Modulartasuna
86
ErasmusIkasgela.java
2016-01-28
PMOO: Modulartasuna
87
2016-01-28
PMOO: Modulartasuna
88
2016-01-28
PMOO: Modulartasuna
89
metodoak
klasearenak
dira, ez
objektu edo
instantzia
batenak
ErasmusIkasgelaProba.java
2016-01-28
PMOO: Modulartasuna
90
Ariketa
EMA bat inplementatu: zenbaki-makina
g
Eragiketak:
hasieratu: zenbaki bat emanik...
hurrengo
g zenbakia
PMOO: Modulartasuna
91
UML, labur-labur
UML,, Modelatzeko Lengoaia
g
Bateratuak ((Unified
Modeling Language) software-sistemen modeloak
sortzeko balio du.
Sistema bat bistaratu, espezifikatu, eraiki eta
g
g
grafiko bat da
dokumentatzeko lengoaia
Software-sistema baten "planoa" (modeloa)
deskribatzeko estandartzat har daiteke
daiteke, eta honako
elementu hauek biltzen ditu, besteak beste: sistemaren
g
eta funtzionalitatea,, datu-baseen ereduak,,
logika
osagai berrerabilgarriak, erabilera-kasuak...
2016-01-28
PMOO: Modulartasuna
95
UML, labur-labur
UML 2.0-n 13 diagrama mota bereizten dira
Sistemaren egitura edo arkitektura deskribatzekoak: klase-,
osagai- eta objektu-diagramak, besteak beste.
Sistemaren portaera deskribatzekoak: sekuentziadiagramak, erabilera-kasuenak eta abar.
2016-01-28
PMOO: Modulartasuna
96
UML, labur-labur
Klase-diagrama
Klase bat errepresentatzeko hiru ataletan banatutako koadro bat erabiltzen
da:
Klasearen izena
Atributuak,
Atributuak mota definitu edo zehazten dutenak
Eragiketak, motaren portaera deskribatzen duten eragiketa edo metodoak
(eraikitzaileak eta beste)
Atributu
bu u nahiz
a
metodoen
e odoe au
aurretik
e ikur
u ba
bat ja
jarri o
ohi da, be
beren
e ikusgaitasuna
usga asu a
zer-nolakoa den zehazteko: + (publikoa), - (pribatua) eta # (basbestua).
+ p
public
- private
# protected
Klasearen izena
+
+
+
Data
eguna: int
hila: int
urtea: int
Data (int, int, int)
egunKop(Data): int
hila(): int
atributuak
Data.java
eragiketak
2016-01-28
class Data {
private int eguna;
private int hila;
private int urtea;
//. . .
public Data(int d, int m, int y)
{...}
public int egunKop(Data bestea)
{
{...}
}
public int hila() {...}
//. . .
}
PMOO: Modulartasuna
97
UML, labur-labur
Klase-diagrama
Objektu eta klaseak elkarren artean erlazionatuta egon daitezke
Adibidez, modulu batek beste baten beharra edo dependentzia duela
erakusteko, mendekotza-erlazio orokorraz baliatuko gara (lerro etenezko
gezi bat):
+
+
+
Pertsona
jaiotzeData: Data
izena: String
sexua: String
Pertsona()
urtebetetzea(): Data
sexua(): String
+
+
+
Data
eguna: int
hila: int
urtea: int
Data (int, int, int)
egunak(Data): int
hila(): int
Klase
ase bat beste bate
baten a
azpiklasea
p asea de
dela
a ad
adierazteko,
e a te o, be
berriz,, beste ge
gezi hau
au
erabiliko dugu (aurrerago ikusiko da kontzeptu hau):
2016-01-28
PMOO: Modulartasuna
98
<<singleton>>
ErasmusIkasgela
ErasmusIkasgela objektua
bera maneiatzen da
proba-programa honetan
-ikasgela: Ikasle[]
-azkena: int
-ErasmusIkasgela(): ErasmusIkasgela
+kargatuFitxategitik()
+ikaslerikOnena(): Ikasle
+zenbatIkasle(): int
+ikasleaGehitu(in
( i:Ikasle))
+ordenatu()
ErasmusIkasgelaProba
+main()
eraikitzailea publikoa da
Ikasle motako i1, i2... objektuak
(instantziak) erazagutu, eraiki eta
maneiatzen dira proba-programa honetan
Ikasle
-izena: String
-taldea: Talde
-nota: Nota
+Ikasle(): Ikasle
+izena(): String
+taldea(): Talde
+nota(): Nota
+aldatuTaldea(in t:Talde)
+esleituNota(in n:Nota)
IkasleProba
+main()
Nota
Talde
Geziek modulu arteko
mendekotza (dependentzia)
adierazten dute
dute. Hala ere
ere,
irudian ez daude adierazita
dependentzia guztiak.
2016-01-28
PMOO: Modulartasuna
99
Liburutegi-unitateak
g
Programazio-lengoaia guztietan daude oso helburu desberdineko
funtzio-liburutegiak. Liburutegi horietan, askotan egin behar
izaten diren lanak "eginda" aurkituko ditugu maiz, eta, egokitze
txiki bat eginez (batzuetan ezta hori ere!), geure programetan
txertatu eta baliatu ahal izango ditugu. Askotan zailago da ongi
garatutako
k llengoaia
i b
batek
k duen
d
lib
liburutegi-sistema
i i
ondo
d
ezagutzea lengoaia bera ikastea baino.
Liburutegi unitateak:
Liburutegi-unitateak:
(Berr)erabil daitezke, beste unitate batetik inportatuz (with,
import )
import...)
Hainbat programak partekatzen ahal dituzte
Maila baxuagoko
g
beste liburutegi-unitate
g
batzuen mendeko
izan daitezke.
2016-01-28
PMOO: Modulartasuna
103
PMOO: Modulartasuna
104
package Pakete1;
...
package body Pakete1 is
...
Konpilazio-unitateak
Konpilazio
unitateak
2016-01-28
Liburutegi-unitateak
Liburutegi
unitateak
Programa
PMOO: Modulartasuna
105
Unitateak deskonposatzen
Problema handiak tratatzeko, programak
p
egin
g behar dira:
deskonposatu
Unitate habiaratua: unitate baten barruan
beste unitate bat dago
Unitate umeak
Unitate ume
me bat logikoki pakete baten barr
barruan
an
erazagutzen da, baina fisikoki separatuta dago
Unitate ume bat konpilazio-unitate
konpilazio unitate bat da
2016-01-28
PMOO: Modulartasuna
106
Unitate umeak
package Interfazea is
...
package Interfazea is
...
end Interfazea;
package Sentsoreak is
...
end Sentsoreak;
package Interfazea.Sentsoreak
Interfazea Sentsoreak is
...
end Interfazea.Sentsoreak;
package Alarmak is
...
end Alarmak;
package Interfazea.Alarmak is
...
end Interfazea.Alarmak;
interfazea.ads
interfazea-sentsoreak
interfazea
sentsoreak.ads
ads
interfazea-alarmak.ads
package Argiak is
...
end Argiak;
package Interfazea.Argiak is
...
end Interfazea.Argiak;
interfazea-argiak.ads
end Interfazea;
interfazea.ads
2016-01-28
PMOO: Modulartasuna
107
Unitate umeak
U
Unitate
it t ume b
batek
t k ez du
d with klausularik
kl
l ik
behar bere gurasoak esportatzen dituen
baliabideak erabiltzeko
g
badu with
Beste unitate batek egiten
ume unitatea, orduan erabil ditzake bere
gurasoaren baliabide publikoak ere
with Interfazea.Sentsoreak
with Interfazea,
, Interfazea.Sentsoreak
2016-01-28
PMOO: Modulartasuna
108
2016-01-28
PMOO: Modulartasuna
109
p
package
g Interfazea is
...
end Interfazea;
package Interfazea.Sentsoreak is
...
end Interfazea.Sentsoreak;
package Interfazea.Alarmak is
...
end Interfazea.Alarmak;
package Interfazea.Argiak is
...
end Interfazea.Argiak;
PMOO: Modulartasuna
110
Unitate umeak
Unitate habiaratuekin alderatuta:
U
Unitate
tate u
umeak
ea kanpotik
a pot e
erabiltzeko,
ab t e o, u
unitate
tate
umea aipatu behar da with klausulan
Unitate habiaratu publikoak,
publikoak berriz
berriz, beste
unitate batek erabil ditzake, haien gurasoa
with atalean aipatuta badago
with klausula batean sar daiteke unitate ume
bat; ez,
ez ordea
ordea, unitate habiaratu bat
2016-01-28
PMOO: Modulartasuna
111
2016-01-28
PMOO: Modulartasuna
112
package Aita is
...
end Aita;
aita.ads
2016-01-28
aita.ads
aita.adb
PMOO: Modulartasuna
aita.adb
113
2016-01-28
PMOO: Modulartasuna
114
Liburutegi-unitateak Javan
2016-01-28
PMOO: Modulartasuna
115
import java.io.*
import
java.io.BufferedReader
p
j
lehen kasuan, java.io paketeko klase guztiak inportatzen dira
bigarrenean, java.io.BufferedReader klasea baino ez da inportatzen
Klase
batean,
beraz,
erabil
ditzakegu,
beren d
deitura
hutsaz
baliatuz,
Kl
b t
b
bil dit
k
b
it
h
t
b
li t
import klausularen bidez aipatu diren pakete guztietako klase
publikoak.
2016-01-28
PMOO: Modulartasuna
117
2016-01-28
PMOO: Modulartasuna
118
Klase b
Kl
bat,
t b
berez, iizengabeko
b k paketekoa
k t k d
da ((pakete
k t llehenetsia,
h
t i b
besterik
t ik
ezekoa).
Aplikazioko klaseak paketetan antolatu nahi badira, iturburu-programak
paketeen
k t
iizen b
bereko
k di
direktorioetan
kt i t kkokatu
k t b
behar
h di
dira, pakete-egitura
k t
it
iislatzen
l t
duen direktorio-egitura bat eratuz (hori dena, gehienetan, programazioinguruneak eginda emango digu).
Klase bat pakete batekoa dela adierazteko
adierazteko, package klausula erabili behar da
(klasearen aurretik).
Java paketeak: zentzu batean, Ada-z pakete umeak erabiliz eratutako paketehierarkien antzekoak dira
dira.
p1 paketea
package p1;
class
l
Klasea1
Kl
1 {
{...}
}
2016-01-28
package p1;
package p1;
public
bli class
l
Klasea2 {...}
PMOO: Modulartasuna
119
Sarrera
Erroreen tratamendua
Salbuespen motak
Programatzaileak definitutakoak
Programazio-lengoaiak aurredefinituta dituenak
Salbuespenen propagazioa
Salbuespenen tratamendua.
Salbuespenen tratamendua Adan eta Javan.
Metodologia pixka bat: nola jokatu erroreen aurrean?
2/15/2016
Sarrera
Sarrera
2/15/2016
2/15/2016
Salbuespen motak
Erroreen tratamendua
Constraint_Error, Program_Error,
Storage_Error...
Javan:
ArithmeticException, NumberFormatException,
IndexOutOfBoundsException...
2/15/2016
Aurredefinituak eta
programatzaileak definitutakoak
Constraint_Error:
Salbuespen aurredefinituak
procedure P is
N : Positive;
begin
Ada.Integer_Text_IO.Get (N);
-- eta -4 bada teklatutik
-- sartzen dena?
-- => Constraint_Error
Program_Error:
2/15/2016
2/15/2016
Sarrera/irteerakoak:
Bestelakoak:
ArithmeticException: Zatiketa zerorekin egiten denean, adibidez
NumberFormatException: Zenbaki bat irakurtzean, formatu
desegokia
IndexOutOfBoundsException: Array baten mugetatik "ateratzen"
garenean
NegativeArraySize: Array bati neurri negatiboak ematen
dizkiogunean
NullPointerException: Objektu bat eraiki baino lehen erabiltzen
saiatzen garenean
Sarrera/irteerako salbuespenak:
Data_Error: fitxategitik irakurritakoa ez dator bat datua
gorde nahi den aldagaiaren motarekin.
End_Error: fitxategi-bukaerara iritsi gara, eta bertatik
irakurtzen saiatu gara.
Name_Error: fitxategi bat ireki nahi, baina ez da
existitzen.
2/15/2016
2. Tipos de excepciones
No hay suficiente
memoria
java.lang.ArithmeticException
Excepciones ligadas al
tratamiento de arrays:
Almacenamiento
Indices fuera de rango
Talla negativa
java.lang.ArrayStoreException
java.lang.ArrayIndexOutOfBoundsException
java.lang.NegativeArraySizeException
java.lang.IndexOutOfBoundsException
java.lang.StringIndexOutOfBoundsException
java.lang.IllegalArgumentException
java.lang.NumberFormatException
Incompatibilidad en el paso de
parmetros en procedimientos y
funciones
Hemos llegado al final del fichero y se
sigue leyendo de l
java.io.EOFException
java.io.FileNotFoundException
java.io.IOException
java.lang.NullPointerException
2/15/2016
10
...
2/15/2016
11 11
2/15/2016
12
Ez
Bai
Tratatzen du?
Bai
Deitzailerik?
Bai
Ez
Errorerik edo
raise/
throw
maneiatzailean
?
Ez
Ez
Deitzailerik?
2/15/2016
13
2/15/2016
P1
14
P1
P2
P2
P3
P3
P4
P4
when X => tratatu,
prozesu lokala (sententziak,
azpiprograma-deiak...)
P5
P5
P6
2/15/2016
Programa "ondo"
bukatu da
dei-pila
Bai
Exekuzioerrorea
X
salbuespena
P6
15
2/15/2016
16
P1
P2
P2
P3
P3
P4
P4
when X => berriro saiatu
P5
P5
X
salbuespena
17
2/15/2016
18
P1
P1
P2
exekuzioerrorea!!
P3
P2
P3
P4
P5
X
salbuespena
P6
2/15/2016
P6
P6
2/15/2016
X
salbuespena
P4
X
salbuespena
P5
P6
19
2/15/2016
20
Salbuespenak Adan:
erazagutu, sorrarrazi eta tratatu
Programatzaileak definitutako salbuespenak erazagutu,
sorrarazi eta tratatu egin behar dira.
Salbuespena erazagutu:
Non? Erazagupen-atalean (blokean edo paketean)
Nola? Lista_Beterik : exception;
2/15/2016
begin
--...
exception
when Lista_Beterik => ... [raise;]
end;
21
Sorraraztea (altxatzea)
raise [<salbuespen-izena>];
22
<salbuespen-izena> : exception;
Adibideak
2/15/2016
Erazagupena
Salbuespen aurredefinitua
Salbuespenak Adan
23
2/15/2016
24
Adibidea
Salbuespenak Javan
procedure P is
Errorea : exception;
function F return Natural is
begin
--...
end F;
function Q return Natural is
N : Natural := F; --demagun F-k Errorea ematen duela (adibidea)
begin
--...
exception
when Errorea => --Q-ren salbuespen-maneiatzailea
end Q;
begin
Q; --...
hemen maneiatuko
exception
when Errorea => --P-ren salbuespen-maneiatzailea
end P;
2/15/2016
da
25
26
Salbuespenak Javan:
erazagutu, sorrarazi eta tratatu
Programatzaileak definitutako salbuespenak erazagutu, sorrarazi eta tratatu
egin behar dira. Gainera, metodo batek salbuespen bat sorraraz badezake baina
tratatzen ez badu, esplizituki aitortu behar du hala dela (arriskuaz ohartarazi).
Salbuespena erazagutu:
Salbuespenak ere klaseak dira: Exception-en ume, normalean.
Nola?
public class ListaBeterik extends Exception {...}
2/15/2016
27
2/15/2016
28
Salbuespenak Javan:
try-catch-finally blokeak
Salbuespenak Javan:
try-catch-finally blokeak
2/15/2016
29
try batean gutxienez catch bloke bat jarri behar da; hainbat
catch jar daitezke, salbuespen desberdinak tratatzeko; azkenik,
finally bloke bat ere ager daiteke.
2/15/2016
30
Adibidea
zatikiHandiena = ZatikiListaEMA.zatikiaPosizioan(0);
} catch (ZatikiListaEMA.ZatikirikEzPosizioHorretan e) {
System.err.println(e);
try {//...;
writeList();
//...; }
catch (ArrayIndexOutOfBoundsException e) {
System.err.println
("Array-aren mugak gainditu dira: " + e.getMessage());
}
catch (IOException e) {
2/15/2016
31
2/15/2016
32
Adibidea
extends Exception {
public ZatikirikEzPosizioHorretan(String s) {super(s);}
2/15/2016
33
2/15/2016
package Pilak is
--...
-- eragiketak
begin
--...
raise Pila_Hutsik;
--Sarrera: ...
else
--Irteera: ...
--...
end if;
end Gailurra;
--...
Pila_Beterik, Pila_Hutsik : exception;
private
--...
34
end Pilak;
PMOO: Erroreen tratamendua. Salbuespenak.
35
2/15/2016
36
// eremuak: ...
// salbuespenak
long z, i;
if (bestea.zenbakitzailea == 0) {
} else {
// metodoak...
//...
/**
* @param bestea
37
38
salbuespen-klaseak erazagutu
jaurti behar direnean jaurti
eta tratatu behar diren tokian tratatu (probaprogrametan, batik bat)
horrez gain, metodoen @exception (metodo barruan
jaurti eta tratatzen diren salbuespenen kasuan) eta
@throws (metodotik kanpo "ateratzen" diren
salbuespenenean) espezifikazio-oharrak ere bete behar
dira, behar bezala
Adibideak
2/15/2016
2/15/2016
39
2/15/2016
40
Ada vs Java
2/15/2016
procedure P1 (...) is
begin
--...
[declare
--erazagupenak]
begin
--sententziak
exception
when ... => --sententziak
when ... => --sententziak
end;
--...
exception
...
end P1;
41
2/15/2016
42
2/15/2016
43
2/15/2016
44
begin
Ada.Text_IO.Open (...); -- gerta liteke Name_Error
-- fitxategia existitzen
-- ez bada
exception
when Ada.Text_IO.Name_Error =>
Ada.Text_IO.Create (...);
end;
2/15/2016
EXEKUZIO ERROREA
46
Zenb1,Zenb2: Integer;
Emaitza: Integer;
Zenb1,Zenb2: Integer;
Emaitza: Integer;
begin
Ada.Text_IO.Put_Line(Sartu zenbaki bat:");
Ada.Integer_Text_IO.Get(Zenb1);
Ada.Text_IO.Put_Line("Sartu beste zenbaki bat:");
Ada.Integer_Text_IO.Get(Zenb2);
Emaitza:=Zatitu(Zenb1,Zenb2);
Ada.Integer_Text_IO.Put(Emaitza);
end Zatiketa;
PMOO: Erroreen tratamendua. Salbuespenak.
2/15/2016
2/15/2016
47
Programaren
kasu normal
gisa tratatzea
begin
Ada.Text_IO.Put_Line(Sartu zenbaki bat:");
Ada.Integer_Text_IO.Get(Zenb1);
Ada.Text_IO.Put_Line("Sartu beste zenbaki bat:");
Ada.Integer_Text_IO.Get(Zenb2);
if (Zenb2 = 0) then Ada.Text_IO.Put_Line(Zerorekin ezin da
zatitu!");
else Emaitza:=Zatitu(Zenb1,Zenb2);
Ada.Integer_Text_IO.Put(Emaitza);
end if;
PMOO: Erroreen tratamendua. Salbuespenak.
end2/15/2016
Zatiketa;
48
49
Salbuespen egoera
identifikatu, eta
horretaz informatu
deitzaileari.
Zenb1,Zenb2,Emaitza: Integer;
begin
Ada.Text_IO.Put_Line(Sartu zenbaki bat:");
Ada.Integer_Text_IO.Get(Zenb1);
Ada.Text_IO.Put_Line("Sartu beste zenbaki bat:");
Ada.Integer_Text_IO.Get(Zenb2);
Emaitza:=Zatitu(Zenb1,Zenb2);
Ada.Integer_Text_IO.Put(Emaitza);
exception
when Zeroarekin_zatitu => null;
2/15/2016
PMOO: Erroreen tratamendua. Salbuespenak.
end Zatiketa;
51
4 gaia: Softwarearen
4.
p
berrerabilpena
Erreferentziak:
http://java.sun.com/docs/books/tutorial/java/generics/
Edukiak
Sarrera
Generikoak Adan
Erazagupena eta instantziazioa. Erabilera.
Parametro generikoak: mota-, azpiprograma- eta balioparametroak.
Ariketak
Generikoak Javan
Object klaseaz baliatuz.
Erazagupena. Instantziazioa eta erabilera aldagaia
erazagutzean.
erazagutzean
Mota-parametroak.
Ariketak
2016-04-04
PMOO: Generikotasuna
Sarrera
Helburua
Ez ibili beti gurpila asmatzen!
Hainbat aplikaziotan erabili ahal izango diren
software-osagaiak garatzea
Onurak
Produkzioa azkartu
Garapen- eta mantentze-kostuak txikitu
Programazio-maila abstraktuagoa lortu
Eraginkortasuna
Kalitatea hobetu
Kontsistentzia
Fidagarritasuna
2016-04-04
PMOO: Generikotasuna
Sarrera
Arazoak
Ez da erraza erabilpen desberdinak izango dituzten
osagaiak garatzea.
Den-dena programatzeko joera dugu, eta ohitura
gutxi "apalera jotzeko" behar dugunaren bila.
Epe laburrerako kostuak:
Mantentzea Osagai berrerabilgarriek sendoak izan behar
dute
Biltegiratzea ("apalak" behar, osagaiok gordetzeko!)
Eskuratzea ((egun
g hor dugu
g amarauna,, Internet))
2016-04-04
PMOO: Generikotasuna
Sarrera
Zer berrerabil daiteke?
Norberak egindako softwarea
Programazio-lengoaietako liburutegiek eskaintzen
duten funtzionalitatea
...
2016-04-04
PMOO: Generikotasuna
Sarrera
Generikoen zergatia:
Adibidez:
type Oso_Taula is array (1 .. 100) of Integer;
procedure Ordenatu_OT (T : in out Oso_Taula);
type Erreal_Taula
Erreal Taula is array (1 .. 100) of Float;
procedure Ordenatu_ET (T : in out Erreal_Taula);
2016-04-04
PMOO: Generikotasuna
Sarrera
Definizioa:
Helburu berdintsuko edo bereko eragiketak edo
paketeak orokortzeko txantiloi edo plantilla modukoak
dira programa-unitate generikoak.
Unitate g
generikoak p
parametrizatzen ahal dira:
parametro generikoak (txantiloiko "zuloak edo
hutsuneak").
Txantiloi horiek instantziatu egin behar dira behar
desberdinetara egokitzeko ("zuloak edo hutsuneak"
b t )
bete).
Orokortze hori gauzatzeko, molde desberdineko
parametro generikoak daude
daude.
2016-04-04
PMOO: Generikotasuna
PMOO: Generikotasuna
Adibidea
Zehaztapena:
generic
type Edozein_Mota is private; --parametro generikoa
procedure Trukatu (X, Y : in out Edozein_Mota);
Inplementazioa:
procedure Trukatu (X, Y : in out Edozein_Mota) is
Lag : Edozein_Mota;
begin
Lag := X;
X :=
: Y;
Y := Lag;
end Trukatu;
2016-04-04
PMOO: Generikotasuna
Instantziazioa
Generikoen instantziazioa:
Txantiloi generiko orokorretik, ale edo instantzia
konkretu bat lortu, zeinetan parametro generikoek
beren balioa (mota bat izan daiteke, adibidez) hartu
baitute.
Instantzian,
I
i
b
beraz,
parametro errealek
l kh
hartuko
k d
dute,
azpiprograma edo pakete generikoaren
erazagupenean parametro generikoek zuten tokia
tokia.
Adibidez (instantziazioa):
procedure Osoak_Trukatu is new Trukatu (Edozein_Mota => Integer);
procedure Errealak_Trukatu is new Trukatu (Edozein_Mota => Float);
2016-04-04
PMOO: Generikotasuna
10
Instantziazioa
Generikoen instantziazioa:
Non egin daiteke instantziazio bat? Azpiprograma
edo pakete bat erazagut daitekeen lekuan (instantzia
p hau bertan erazagutuko
g
balitz bezala
edo "kopia"
baita).
Generikoak ikusgai
g egon
g beharko du p
puntu horretan,
noski.
Adibidez (instantziazioa):
with Trukatu;
procedure Proba is
procedure Osoak_Trukatu
Osoak Trukatu is new Trukatu (Edozein_Mota
(Edozein Mota =>
> Integer);
I, J : Integer;
begin
--
Osoak Trukatu (I, J);
Osoak_Trukatu
--
2016-04-04
PMOO: Generikotasuna
11
2016-04-04
PMOO: Generikotasuna
12
Mota-parametro
p
g
generikoak
Softwarea parametrizatu, datu-moten arabera:
algoritmo edo pakete bera mota desberdineko
objektuekin erabiltzeko aukera
Datu-abstrakzioen
D t b t k i
b
berrerabilgarritasunaren
bil
it
funtsa
Mota-parametro generikoak definitzerakoan,
honako hauek ari gara zehazten:
Instantziazioan onartuko diren mota konkretuak
Mota horretako objektuekin egin daitezkeen
eragiketak (generikoaren inplementazioan).
2016-04-04
PMOO: Generikotasuna
13
Mota-parametro
p
g
generikoak
Mota-parametro generiko formalak definitzeko moduak:
type T is limited private;
Instantziazioan: edozein mota onartzen du
garapenean,
p
T motako objektuekin:
j
ezin da eragiketarik
g
Generikoaren g
egin
type T is private;
Instantziazioan: edozein mota ez-mugatu
Generikoaren
G
ik
garapenean, T motako
t k objektuekin:
bj kt ki asignazioa,
i
i
= eta
t
/=, besterik ez
type T is (<>);
Instantziazioan: edozein mota diskretu (enumeratuak
(enumeratuak, osoak,
osoak
karaktereak, boolearrak)
Generikoaren garapenean, T motako objektuekin: mota diskretuen
eragiketak: pos, val, succ, first, <
type T is range <>;
Instantziazioan: edozein mota oso (Integer, Natural...)
Generikoaren garapenean, T motako objektuekin: osoen eragiketak
(aritmetikoak )
(aritmetikoak...)
2016-04-04
PMOO: Generikotasuna
14
Mota-parametro
Mota
parametro generikoak
type T is digits <>;
Instantziazioan: koma higikorreko edozein mota (errealak)
Generikoaren garapenean, T motako objektuekin: errealen
eragiketak (aritmetikoak
(aritmetikoak, erlazionalak...)
erlazionalak )
type T is access P;
Instantziazioan: edozein erakusle mota, P motako objektuak
erakusten baldin baditu
Generikoaren garapenean, T motako objektuekin: erakusleen
eragiketak: asignazioa, new
type T is array (Indize) of Osagai;
Instantziazioan: edozein array, indizea Indize motakoa eta
osagaiak Osagai motakoak baldin badira
Generikoaren garapenean, T motako objektuekin: arrayen
eragiketak: indexazioa, agregatuak
2016-04-04
PMOO: Generikotasuna
15
Mota-parametro
p
g
generikoak: hierarkia
limited private
private
(<>)
access
digits <>
array
range <>
PMOO: Generikotasuna
16
Mota-parametro
p
g
generikoak
Parametro generiko formala instantziazioan
parametro
t erreall bateragarri
b t
ib
batekin
t ki ((mota
t
batekin!) ezkondu behar da
Mota-parametro generikoak erlazionatuta egon
daitezke, bat beste baten menpeko izan
Adibidez:
Generikoaren definizioa:
generic
type Osagai is (<>);
type Bektore is array (Integer range <>) of Osagai;
procedure Ordenatu (Taula : in out Bektore);
2016-04-04
PMOO: Generikotasuna
17
Mota-parametro
p
g
generikoak
Generikoaren instantziazioa:
type Kolore is (Beltza, Berdea, Gorria, Urdina, Zuria);
type Kolore_Taula is array (Integer range <>) of Kolore;
-- instantziazioa:
procedure Ordenatu_Kolore_Taula is new
Ordenatu (Osagai => Kolore,
Bektore => Kolore_Taula);
PMOO: Generikotasuna
18
2016-04-04
PMOO: Generikotasuna
19
Arazo bat...
bat
egia ote edozein mota
onartuko dela?
generic
type Edozein_Mota is private; --parametro generikoa
procedure Trukatu (X, Y : in out Edozein_Mota);
H
Honaino,
i
arazorik
ik ez. B
Baina...
i
h
hau egin
i nahi
hi b
badugu
d
((Ikasle_Pilak.Pila
k l
il k il mota
t limited
li i d private
i
i
izanik):
ik)
procedure Ikasle_Pilak_Trukatu is new Trukatu (Edozein_Mota => Ikasle_Pilak.Pila);
soluzioa
generic
type Edozein_Mota is limited private; --mota-parametro generikoa
with procedure Kopiatu (X : out Edozein_Mota; Y : in Edozein_Mota);
--azpiprograma-parametro generikoa
procedure Trukatu (
p
(X,
, Y : in out Edozein_Mota);
);
2016-04-04
PMOO: Generikotasuna
20
Azpiprograma-parametro
pp g
p
g
generikoak
Parametro generiko formala instantziazioan
parametro
t erreall bateragarri
b t
ib
batekin
t ki
(azpiprograma batekin!) ezkondu behar da
Zehaztapena:
generic
type
yp Edozein_Mota is limited p
private;
; --mota-parametro
p
g
generikoa
--azpiprograma-parametro generikoa:
with procedure Kopiatu (X : out Edozein_Mota; Y : in Edozein_Mota);
procedure Trukatu (X, Y : in out Edozein_Mota);
Inplementazioa:
procedure Trukatu (X, Y : in out Edozein_Mota) is
Lag
ag : Edozein
do e _Mota;
ota;
begin
Kopiatu (Lag, X);
-- Lag := X
Kopiatu (X, Y);
-- X := Y
Kopiatu
p
(Y,
(
, Lag);
g);
-- Y := Lag
g
end Trukatu;
2016-04-04
PMOO: Generikotasuna
21
Instantziazioa (adibideak)
E
Emanik
ik Autoak
k paketea:
k t
package Autoak is
type Auto is limited private;
--...
procedure Kopiatu (A1 : out Auto; A2 : in Auto);
-- ...
private
end Autoak;
2016-04-04
PMOO: Generikotasuna
22
Instantziazioa (adibideak)
E
Emanik
ik Pilak
il k pakete
k t generikoaren
ik
i t t i hau:
instantzia
h
with Ikasleak;
package Ikasle_Pilak is new Pilak
(Osagai => Ikasleak.Ikasle);
2016-04-04
PMOO: Generikotasuna
23
orain ez da mota
diskretua!
t pe Bektore
type
Bekto e is array
a a (Integer
(Intege range
ange <>) of Osagai;
Osagai
procedure Ordenatu (Taula : in out Bektore);
PMOO: Generikotasuna
24
PMOO: Generikotasuna
25
Instantziazioa (adibideak)
Emanik, Ikasleak paketean:
function Nota_Txikiagoa (I1, I2 : in Ikasle)
return Boolean;
PMOO: Generikotasuna
26
--...
end K;
U
Unitate
it t generikoari
ik i b
balio
li b
batt emateko
t k erabiltzen
bilt
di
dira.
Balioa konstantetzat hartzen da, generikoaren barruan.
Parametro
P
t errealak
l k parametro
t formal
f
l generikoaren
ik
mota
t
bereko espresioa izan behar du.
Normalean muga konstanteak zehazteko erabiltzen dira
dira.
2016-04-04
PMOO: Generikotasuna
27
2016-04-04
PMOO: Generikotasuna
28
Erabilera:
KI : Mila_Karaktereko_Ilarak.Ilara;
Mila_Karaktereko_Ilarak.Hutsa_Sortu (KI);
-- ...
2016-04-04
PMOO: Generikotasuna
29
Balio-parametroak:
p
beste adibide bat
generic
i
Lehena, Azkena: in Character;
function Tartean (S : in String) return Boolean;
--Sarrera: S string-a
--Irteera: True, S string-eko karaktere guztiak Lehena-ren
-eta Azkena-ren artean baldin badaude (ASCII
-karaktere-multzoan); False bestela
Eragina: S string
string-eko
eko karaktere guztiak emandako
--Eragina:
-tartean daudenetz aztertzen du
function Tartean (S : in String) return Boolean
b i
begin
for I in S'Range loop
if S (I) not in Lehena .. Azkena then
return False;
end if;
end loop;
return True;
end Tartean;
2016-04-04
is
PMOO: Generikotasuna
30
Balio-parametroak:
p
beste adibide bat
with
ith Tartean,
T t
Ad T t IO
Ada.Text_IO;
procedure Proba is
Lerroa : String (1 .. 80);
N : Natural;
Tartean
funtzioaren
instantziazioak:
funtzio-familia bat
osatzen dute
2016-04-04
PMOO: Generikotasuna
31
Hedagarritasuna
generikoak erabiliz
generic
type Osagai is private;
package
k
Li
Listak
t k i
is
type Lista is limited private;
procedure Hutsa_Sortu (L : out Lista);
procedure Erantsi_B
Erantsi B (L : in out Lista; E : in Osagai);
--...
private
type Nodo;
type Lista is access Nodo;
type Nodo is
record
Info : Osagai;
Hurrengoa : Lista;
Listak pakete
generikoa (DMA),
dinamikoki
inplementatua
end record;
end Listak;
2016-04-04
PMOO: Generikotasuna
35
Hedagarritasuna
generikoak erabiliz
generic
type Ilara_Osagai is private;
package Ilara is
procedure Hutsa_Sortu;
procedure Ilararatu (E : in Ilara_Osagai);
--...
end Ilara;
with Listak;
package body Ilara is
package
p
g Ilara_Listak is new Listak (Osagai
g
=> Ilara_Osagai);
g
Q : Ilara_Listak.Lista; --ilara objektu kapsulatua
procedure Hutsa_Sortu is
Ilara pakete
begin
generikoa (EMA),
Ilara Listak Hutsa Sortu (Q);
Ilara_Listak.Hutsa_Sortu
Listak generikoan
end Hutsa_Sortu;
oinarritua. Ariketa:
//...
inplementatu
end Ilara;
Ilararatu eragiketa
2016-04-04
PMOO: Generikotasuna
36
Unitate
U
i
generikoaren
ik
erazagupena: azpiprograma
i
edo
d pakete
k
orokor bat erazagutzea: txantiloi moduko bat, non bete gabe utzi
diren "zulo edo hutsune" batzuk (parametro generikoak: mota,
azpiprograma edo balioak).
Unitate generikoaren instantziazioa: azpiprograma edo pakete
"normal"
normal bat erazagutzea,
erazagutzea generikoaren ale edo instantzia berri bat
eratorriz (is new); instantziazioan "zuloak" bete egiten dira,
parametro formalen ordez errealak ezarriz.
I t t i
Instantziaren
erabilera:
bil
generikoaren
ik
iinstantzia
t t i unitate
it t normall b
batt
denez, hura da erabiltzen dena (azpiprograma edo pakete arrunt
baten gisan).
2016-04-04
PMOO: Generikotasuna
38
2016-04-04
PMOO: Generikotasuna
39
2016-04-04
Oharra: PilaEmaArray
Oh
il
klase hau ez da generikoa
stricto sensu!
PMOO: Generikotasuna
40
Object motako
parametroak eta emaitzak
erabiltzen dira metodoetan
2016-04-04
PMOO: Generikotasuna
41
2016-04-04
PMOO: Generikotasuna
42
2016-04-04
PMOO: Generikotasuna
43
2016-04-04
PMOO: Generikotasuna
44
Generikoen erazagupena,
instantziazioa eta erabilera (Java)
Unitate
U
i
generikoaren
ik
erazagupena: metodo
d edo
d kl
klase orokor
k b
bat
erazagutzea: txantiloi moduko bat, non bete gabe utzi diren "zulo
edo hutsune" batzuk (parametro generikoak: motak).
Unitate generikoaren instantziazioa: metodo edo klase "normal" bat
erazagutzea, generikoaren ale edo instantzia berri bat eratorriz;
instantziazioan "zuloak"
zuloak bete egiten dira
dira, parametro formalen ordez
errealak ezarriz.
Instantziaren erabilera: generikoaren instantzia unitate normal bat
d
denez,
h
hura d
da erabiltzen
bilt
d
dena ((metodo
t d edo
d kl
klase arruntt b
baten
t
gisan).
Javan ez da beharrezkoa,, Adan bezala,, instantzia aurrez egitea
g
gero erabili ahal izateko: erabiltzeko unean bertan egiten da
instantziazioa.
2016-04-04
PMOO: Generikotasuna
45
package kaxak;
public class ZapataKaxa {
private Zapata z;
...
//...
//
Zapata nireZapata = new Zapata(41, kaxak.Zapata.Kolore.BELTZA);
System.out.println
(nireZapata.getKolorea().toString() + " " +
nireZapata getNeurria());
nireZapata.getNeurria());
ZapataKaxa nireZapataKaxa = new ZapataKaxa();
nireZapataKaxa.jarri(nireZapata);
System out println(nireZapataKaxa eman() getKolorea());
System.out.println(nireZapataKaxa.eman().getKolorea());
//...
2016-04-04
PMOO: Generikotasuna
klase arr
arruntak,
ntak
ez generikoak
erabilera
46
Klase generikoak
g
Era ag pena
Erazagupena:
<modifikatzaileak>* class <ident.> <T+> {}
T parametro generikoa ("zuloa edo hutsunea"): edozein klase (edo
interfaze) izan daiteke (ez mota primitibo bat).
package kaxak;
public class KaxaGeneriko <T> {
private T datua;
klase
generikoa
public T eman() {
return datua;
}
public void jarri(T x) {
datua = x;
}
public String toString () {
return datua.toString();
}
}
2016-04-04
PMOO: Generikotasuna
Klase generikoak
47
instantziazioa eta
erabilera aldi berean:
"zuloa" betetzera
d
datorren
mota
zehaztu behar da
package kaxak;
public class KaxaGenProba {
public static void main(String[] args) {
Zapata nireZapata = new Zapata(41, kaxak.Zapata.Kolore.BELTZA);
System.out.println
(nireZapata.getKolorea().toString() + " " +
nireZapata.getNeurria());
PMOO: Generikotasuna
48
erabilera: "zuloa"
betetzera datorren mota
Zatiki da
2016-04-04
PMOO: Generikotasuna
53
PilaGeneriko (DMA),
Vector klasean oinarritua
public void despilatu () throws PilaHutsik {
if (taula.size()
(taula size() == 0) {
throw new PilaHutsik("Pila hutsik dago");
} else {
taula.removeElementAt(taula.size() - 1);
}
}
public E gailurra() throws PilaHutsik {
if (taula.size() == 0) {
throw new PilaHutsik("Pila hutsik dago");
} else {
return taula.elementAt(taula.size()
(
() - 1);
);
}
}
public boolean berdin (PilaGeneriko<E> bestea) {
if (this.taula.size() != bestea.taula.size()) {
return false;
} else {
for (int i=0; i<this.taula.size(); i++) {
if (this.taula.elementAt(i) !=
bestea.taula.elementAt(i)) {
return false;
}
}
return true;
}
}
package pilaGenerikoak;
import java.util.*;
java util *;
public class PilaGeneriko<E> {
private Vector<E> taula; //bektorea
public static class PilaHutsik
extends Exception {
PilaHutsik(String s) {super(s);}
}
public
pub
c PilaGeneriko()
aGe e
o() {
taula = new Vector<E>();
}
public void hustu(){
()
taula.removeAllElements();
}
public void pilaratu (E elem) {
taula.add(elem);
}
2016-04-04
PMOO: Generikotasuna
54
2016-04-04
PMOO: Generikotasuna
55
2016-04-04
parametro generiko
formala (zuloa)
Osagai
PilaGeneriko
-MAX
-taula
-gailurra
+hutsa sortu
+pilaratu
+despilatu
+gailurra
+berdin
+...
PMOO: Generikotasuna
59
ZenbakiPila
PertsonaPila
PilaGeneriko moduluaren
instantzia (Integer
motarekin instantziatua)
2016-04-04
PMOO: Generikotasuna
PilaGeneriko moduluaren
instantzia (Pertsona
motarekin instantziatua)
60
H lb
Helburu
nagusiak
i k
Aurreko
k gaietan
i
ikusitako
ik i k kontzeptuekin
k
ki lotzea:
l
modulartasuna, informazio-ezkutatzea,
berrerabilpena...
2016-05-05
OOP
OOParen
oinarrizko
i
i k ezaugarriak
i k
2016-05-05
Kl
Klaseak
k eta objektuak
bj k k
Klasea
2016-05-05
Kl
Klaseak
k eta objektuak
bj k k
Objektua
2016-05-05
Kl
Klaseak
k eta objektuak
bj k k
Jokalari klasea
Jokalariak.Jokalari mota
J1 : Jokalariak.Jokalari;
J2 : Jokalariak.Jokalari;
objektuak, instantziak
Nolakoak dira j1 Jokalari klaseko edo J1 Jokalariak.Jokalari motako
objektuak? Klase edo mota jakin batekoak izateak atributu eta eragiketa batzuk
egokitzen dizkie:
Atributuak:
Klasea
Mota
NA: 23322332Z
izena: Hodei
helbidea:
...
eraikitzailea
NA-a lortu
izena lortu
helbidea lortu
...
Objektua
Aldagaia
2016-05-05
Zakur
- azalaren kolorea
- begien kolorea
- altuera
+ jan
+ zaunka egin
San Bernardo
At k
Artzakur
+ artaldea zaindu
Xarpax
...
Bulldog
- arriskutsua
Pluto
...
+ zaunka egin
Kl
Klase-hierarkiak
hi
ki k eta objektuak
bj k k
Adibidearekin jarraituz:
Zakur klasea
Atributuak: azalaren kolorea, begien kolorea, altuera...
Metodoak: jan, zaunka egin...
Artzakur klasea
Zakur klase gurasotik atributu eta metodoak heredatzen ditu
artaldea zaindu eragiketa du, gainera (heredatuez gain)
Bulldog klasea
Zakur klase gurasotik atributu eta metodoak heredatzen ditu
arriskutsua atributua du,
du gainera (heredatuez gain)
2016-05-05
Herentzia
Adibid
Adibidez:
Zakur
- azalaren kolorea
- begien
b i kolorea
k l
- altuera
+ jjan
+ zaunka egin
is-a
is
a
Artzakur
+ artaldea zaindu
2016-05-05
10
Herentzia
Espezializazioa:
Birdefinizioa:
Klase
l
batek
b k bere
b klase
kl
gurasoa espezializatzen
l
d bere
du,
b
metodo eta atributu propioekin
Klase hierarkia:
Klase-hierarkia:
2016-05-05
11
2016-05-05
12
M
Mezu-trukearen
k
metafora
f
Objektuak beren artean mezuak trukatuz
komunikatzen dira
Objektu igorlea
Mezua
Objektu jasotzailea
Erantzuna
13
M
Mezu-trukea:
k adibidea
dibid
package Ikasleak is
type Ikasle is private;
procedure Eraiki (
p
(Ikaslea : out Ikasle; S : in String);
g)
procedure Adina_Aldatu (Ikaslea : in out Ikasle; A : in Positive);
--...
end Ikasleak;
with Ikasleak;
procedure
d
N
Nagusia
i is
i
I1 : Ikasleak.Ikasle;
A : Positive;
begin
--...
Ikasleak.Eraiki (I1, "Ur",);
Ikasleak.Adina_Aldatu (I1, 35);
--...
endd Nagusia;
N
i
2016-05-05
Mezuaren jasotzailea: I1
Mezua: Adina_Aldatu
Parametroak: 35
14
M
Mezu-trukea:
k adibidea
dibid
public class Ikasle {
private String izena;
private int adina;
p
public Ikasle (String s) {...};
public void setAdina (int a){...};
//...
}
2016-05-05
I t t i Ikasle motako
Instantzia:
t k i1
objektua sortzen da
Mezuaren jasotzailea: i1
Mezua: setAdina
Parametroak: 35
15
Polimorfismoa eta
lotura dinamikoa
Polimorfismoa:
Lotura dinamikoa:
2016-05-05
O objektua
bj kt A klasekoa
kl k izan
i
daiteke
d it k (estatikoki
( t tik ki definitua),
d fi it ) baina
b i dinamikoki
di
ik ki
beste B klase batekoa gertatu exekuzioan
Dinamikoki esleitutako B klasearen pportaera hartuko luke O objektuak
j
exekuzioan
16
Polimorfismoa eta
lotura dinamikoa
Irudi
- x, y (koordenatuak)
Puntu
Zirkulu
- erradioa
Karratu
- aldea
17
Polimorfismoa eta
lotura dinamikoa
Irudi
(
)
- x,, y (koordenatuak)
+ azalera 0.0
Puntu
Zirkulu
- erradioa
+ azalera
Karratu
- aldea
+ azalera
18
Polimorfismoa eta
lotura dinamikoa
Demagun irudi-lista bat daukagula, eta listako irudi guztien
azaleren batura kalkulatu nahi dugula:
19
Klaseak
2016-05-05
20
Metodoak: gainkarga
class Puntu {
private double x;
private double y;
public void print() {
System.out.println("Puntua: " + this.x + "," + this.y);}
public void print(int n) { //n aldiz inprimatzen du!
for (int i = 0; i < n; i++) {
System.out.println("(" + this.x + "," + this.y + ")");
}
}
}
21
H
Herentzia
i
Bada klase erro lehenetsi bat, Object, eta horren eratorpena dira beste klase
guztiak.
i k Klase-hierarkiak
Kl
hi
ki k era daitezke
d i k honela.
h l
2016-05-05
22
Adibid klase-hedapena
Adibidea:
kl
h d
class BankuKontu {
protected double vSaldoa;
// aldagaia
ld
i
public double saldoa() {
return vSaldoa;
}
}
class NireKlasea {
public static void sartuDirua() {
KontuKorronte cc = new KontuKorronte();
cc sartu(125000 00); // k
cc.sartu(125000.00);
k. korrontean sartu
System.out.println("Kontu korrontearen saldoa = " +
cc.saldoa()); // saldoa inprimatu (metodo heredatuari dei eginez)
}
}
2016-05-05
24
Adibid klase-hedapena
Adibidea:
kl
h d
BankuKontu
-vSaldoa
+saldoa
KontuKorronte
+sartu
2016-05-05
25
Adibid klase-hedapena
Adibidea:
kl
h d
2016-05-05
26
H
Herentzia
i eta polimorfismoa
li
fi
Polimorfismoa
2016-05-05
Exekuzio-denboran
E
ek io denboran erabakiko da zein
ein den exekutatzen
e ek tat en dena
(dispatching edo lotura dinamikoa).
27
Adibid polimorfismoa
Adibidea:
li
fi
class KontuKorronte extends
BankuKontu {
class BankuKontu {
protected double vSaldoa;
//KontuKorronte-ren
//metodo esklusiboak:
//
//...
}
2016-05-05
28
Adibid polimorfismoa
Adibidea:
li
fi
BankuKontu
-vSaldoa
+saldoa
+interesaMetatu
KontuKorronte
+sartu
+interesaMetatu
2016-05-05
29
Adibid polimorfismoa
Adibidea:
li
fi
public class NireKlasea {
public static void funtzioa(BankuKontu
p
(
kontua)
) {
kontua.interesaMetatu(); //dispatching-deia
}
public static void besteFuntzioBat() {
BankuKontu cb = new BankuKontu();
funtzioa(cb); //dei zuzena (egokia)
KontuKorronte cc = new KontuKorronte();
funtzioa(cc); //hau ere zuzena da
}
}
2016-05-05
30
Adibid polimorfismoa
Adibidea:
li
fi
funtzioa-ren lehen deia zuzena (egokia) da: BankuKontuko interesaMetatu exekutatuko da.
da
2016-05-05
31
Polimorfismoa
32
33
Kl
Klase
eta metodo
d abstraktuak
b k k
2016-05-05
34
35
Adibidea:
dibid klase
kl
eta metodo
d abstraktuak
b k k
interesaMetatu abstraktu egiten dugu, kontumota guztiek beren interesaMetatu izan dezaten
(desberdinak izan daitezke)
daitezke).
2016-05-05
36
BankuKontu
osagaiak dituen
array-a
(h t
(heterogeneoa)
)
int intMetatua = 0;
for (int i = 0; i < osagaiKop; i++) {
intMetatua += bk[i].interesaMetatu();
//eragiketa polimorfikoa: dispatching-a
//inprimatu intMetatua
//...
//
}
}
}
2016-05-05
37
2016-05-05
38
I
Interfazeak
f
k
2016-05-05
39
I
Interfazeak
f
k
2016-05-05
40
Adibid interfazeak
Adibidea:
i
f
k
public interface Konparagarri {
public boolean txikiagoaDa (Konparagarri bestea);
public boolean berdinaDa (Konparagarri bestea); }
public class Oso implements Konparagarri {
private int balioa;
public Oso (int z) {balioa = z;} //eraik.
public int getBalioa () {return balioa;}
public boolean berdinaDa (Konparagarri bestea) {
return this.balioa == ((Oso)bestea).balioa; }
public boolean txikiagoaDa (Konparagarri bestea) {
return this.balioa < ((Oso)bestea).balioa; }
}
2016-05-05
41
extends
t d vs implements
i l
t
kl
klase
eratorri
t i ez-abstraktuek
b t kt k guraso
abstraktuan erazaguturiko metodo
abstraktu guztiak inplementatu behar
dituzte
2016-05-05
42
I di ariketa,
Irudien
ik
Javaz
J
klase abstraktua
eraikitzailea (datuak
eskatu
k t eta
t irudia
i di
eraiki)
Puntu
+Puntu
+azalera
2016-05-05
Irudi
-x
-y
+Irudi
+xKoord
y oo d
+yKoord
+azalera
+distantzia
Zirkulu
erradioa
-erradioa
+Zirkulu
+azalera
azalera, eragiketa
abstraktua
(azpiklaseetan
inplementatuko da)
distantzia,
birdefinitu ezin den
eragiketa (final)
Karratu
-aldea
aldea
+Karratu
+azalera
43
I di klasea
Irudi
kl
/**
* Title: Irudien klase nagusia
* @version 1.0
*/
/
import java.util.Scanner;
public abstract class Irudi {
private int x; //eremuak
private int y;
//eraikitzailea
public Irudi(Scanner kontsola) {
System.out.println
("Idatzi x eta y koordenatuak (zenb. osoak, bi lerrotan):");
x = kontsola.nextInt();
y = kontsola.nextInt();
}
2016-05-05
44
I di klasea
Irudi
kl
//behaketa-funtzioak
public int xKoord() {
return x;
}
public int yKoord() {
return
etu
y;
}
//distantzia: inplem. bakarra hierarkia osoan
public final double distantzia() {
return Math.pow((Math.pow(x,
Math pow((Math pow(x 2) + Math
Math.pow(y,
pow(y 2)),
2)) 0.5);
0 5);
}
//azalera: inplem. berezitua klase bakoitzerako
public abstract double azalera();
}
2016-05-05
45
Zi k l klasea
Zirkulu
kl
/**
* Title: Irudi geometrikoak: zirkuluen klasea
* @version 1.0
*/
import java.util.Scanner;
public
bli class
l
Zi k l extends
Zirkulu
t d Irudi
I di {
private double erradioa;
public Zirkulu(Scanner
p
(
kontsola)
) {
super(kontsola);
System.out.println("Idatzi erradioa (zenb. erreala):");
erradioa = kontsola.nextDouble();
}
public double azalera() {
return Math.pow(erradioa, 2) * Math.PI;
}
}
2016-05-05
46
P t klasea
Puntu
kl
/**
* Title: Irudi geometrikoak: puntuen klasea
* @version 1.0
*/
import java.util.Scanner;
public class Puntu extends Irudi {
public Puntu(Scanner kontsola) {
super(kontsola);
}
public double azalera() {
return 0.0;
}
}
2016-05-05
47
I diM lt
IrudiMultzoa
kl
klasea
(EMA)
/**
* Title: Irudi-multzoa (egoera-makina abstraktua)
* @version 1.0
*/
import java.util.ArrayList;
public class IrudiMultzoa {
//objektu kapsulatua: multzoa (pribatua)
private static final ArrayList<Irudi> multzoa = new ArrayList<Irudi>();
//eraikitzailea pribatua (kanpotik ikus ez dadin)
private IrudiMultzoa() {
}
//eragiketa estatikoak, klaseari (objektuari)
//soilik dagozkionak
public static void irudiaErantsi(Irudi
p
(
irudia)
) {
multzoa.add(irudia);
}
public static Irudi hurrengoIrudia() {
return multzoa.get(0);
}
public static void irudiaKendu() {
multzoa.remove(0);
}
public static boolean hutsaDa(){
return multzoa.isEmpty();
}
}
2016-05-05
48
N
Nagusia
i klasea
kl
(progr.
(
nagusia)
i )
/**
* Title: Irudi geometrikoak: programa nagusia
* @version 1.0
*/
import java.util.*;
public class Nagusia {
//main: p
prozedura nagusia
g
public static void main(String[] args) {
double a = 0.0; //azaleren batura edukitzeko
int aukera = 1;
Scanner sarreraStandarra = new Scanner (System.in);
while (aukera != 0) {
System.out.println("Hauta ezazu nahi duzun aukera:");
System.out.println("0 : Irten");
System.out.println("1 : Zirkulua sortu");
System out println("2
System.out.println(
2 : Karratua sortu");
sortu );
System.out.println("3 : Puntua sortu");
aukera = sarreraStandarra.nextInt();
//...
2016-05-05
51
N
Nagusia
i klasea
kl
(progr.
(
nagusia)
i )
switch (aukera) {
case 0: break; //exekuzioa bertan behera utzi
case 1: Zirkulu z = new Zirkulu(sarreraStandarra);
IrudiMultzoa.irudiaErantsi(z);
break;
case 2: Karratu k = new Karratu(sarreraStandarra);
IrudiMultzoa.irudiaErantsi(k);
break;
case 3: Puntu p = new Puntu(sarreraStandarra);
IrudiMultzoa.irudiaErantsi(p);
break;
break
default: System.out.println("Aukera okerra!");
}
}
Irudi irudia;
while (!IrudiMultzoa.hutsaDa())
(!IrudiMultzoa hutsaDa()) {
irudia = IrudiMultzoa.hurrengoIrudia();
System.out.println("- IRUDIA (x: " + irudia.xKoord() + "; y: " + irudia.yKoord() + ")");
System.out.println("Azalera: " + irudia.azalera()); //dispatching-a
System.out.println
("Jatorritiko distantzia: " + irudia.distantzia());
a = a + irudia.azalera();
IrudiMultzoa.irudiaKendu();
}
System.out.println("--------------------------------------------------");
System.out.println("AZALERA GUZTIEN BATURA: " + a);
}
}
2016-05-05
52
hedapena
konstanteak
Metodoen
M t d
bi
birdefinizioa
d fi i i
Ikusgaitasuna
Eremu
Kidearen
partekotza
(heredatu ala ez)
packagee (besterik
ezean)
public
protected
private
Klaseak
Eremuak
(aldagaiak)
Metodoak
2016-05-05
final
static
abstract
X
53
Klaseen modifikatzaileak:
2016-05-05
package:
k
kl
klasea
definituta
d fi i
dagoen
d
paketeko
k k klaseetatik
kl
ik atzigarria
i
i
public: edozein klasetatik atzigarria
private: beste edozein klasetatik ez da atzigarria
protected: bere azpiklase guztietatik (pakete berekoak izan edo ez)
eta pakete bereko klase guztietatik atzigarri
static: ez da ohikoa klase bat static izatea, non eta ez den barneklase pribatu bat
abstract: klase abstraktu bati dagozkion objektuak ezingo dira sortu,
sortu
baina klase abstraktua hedatu ahal izango dugu
final: klasea ezin da hedatu
54
Eremuen modifikatzaileak:
2016-05-05
55
Metodoen modifikatzaileak:
2016-05-05
56
A
Aurrekaria:
k i Ad
Adako
k mota eratorriak
i k
Datu-mota eratorriak
B t adibide
Beste
dibid bat:
b t
type Karta is
(Bastoiak, Diamanteak, Bihotzak, Ezpatak, Komodinak);
-- Karta motaren datu-mota eratorri bat:
type Palo is new Karta range Bastoiak .. Ezpatak;
-- kontuz, honako hau desberdina da eta:
subtype
yp Palo is Karta range
g Bastoiak .. Ezpatak;
p
2016-05-05
58
Ad k mota eratorriak:
Adako
i k adibidea
dibid
package Lerro_Zenbakiak1 is
subtype Lerro_Zenbaki is Positive;
end Lerro_Zenbakiak1;
Lerro Zenbakiak1;
package Lerro_Zenbakiak2 is
type Lerro_Zenbaki is new Positive;
-- eragiketa eratorriak birdefinitzeko aukera dago:
overriding
function "+" (LZ1, LZ2 : in Lerro_Zenbaki) return Lerro_Zenbaki;
end Lerro_Zenbakiak2;
package Lerro_Zenbakiak3 is
type Lerro_Zenbaki is private;
-- eraikitzailea
f
function
i
Lerro_Zenbakia
b ki (
(I : in
i Positive)
i i ) return Lerro_Zenbaki;
b ki
function "+" (LZ1, LZ2 : in Lerro_Zenbaki) return Lerro_Zenbaki;
private
type Lerro_Zenbaki is new Positive;
-- inplementazioan (gorputzean) erabil ditzakegu positiboen eragiketak
end Lerro_Zenbakiak3;
2016-05-05
59
Ad k mota eratorriak:
Adako
i k adibidea
dibid
with Lerro_Zenbakiak1, Lerro_Zenbakiak2, Lerro_Zenbakiak3;
procedure Proba is
LZ11, LZ12, LZ13 : Lerro_Zenbakiak1.Lerro_Zenbaki;
LZ21, LZ22, LZ23 : Lerro_Zenbakiak2.Lerro_Zenbaki;
LZ31, LZ32, LZ33 : Lerro_Zenbakiak3.Lerro_Zenbaki;
P : Positive;
begin
--edozein zenbaki positiborekin bezala...
LZ11 := 3;
LZ12 := 7;
LZ13 := LZ11 + LZ12
LZ12;
LZ13 := LZ11 * LZ12 ** 3; --zentzugabea erabat, seguru asko!
LZ12 := P; --zilegi da esleipena
--lerro-zenbakiak zenbaki positiboak dira
--baina
baina ez dira mota bera
LZ21 := 3;
LZ22 := 7;
LZ23 := Lerro_Zenbakiak2."+" (LZ21, LZ22); --eragiketa birdefinitua
LZ23 := Lerro_Zenbakiak2."*" (LZ21, LZ22); --eragiketak paketean eratortzen dira
LZ22 := Lerro_Zenbakiak2.Lerro_Zenbaki (P); --esleitu ahal izateko bihurketa behar da
--lerro-zenbakiak mota pribatua dira:
--paketeko eragiketak baino ez ditugu eskura
--motaren gainean erabateko kontrola du programatzaileak
LZ31 := Lerro_Zenbakiak3.Lerro_Zenbakia (3); --eraikuntza
LZ32 := Lerro_Zenbakiak3.Lerro_Zenbakia (7);
LZ33 := Lerro_Zenbakiak3."+" (LZ31, LZ32);
end Proba;
2016-05-05
60
OOP Ad
OOPa
Adan: mota etiketatuak
ik
k
Datu-moten hedatzea: mota etiketatuak
Erregistro egituraz baliatuko gara datu-mota bat atributu berriak gehituz hedatzeko
2016-05-05
61
OOP Ad
OOPa
Adan: mota etiketatuak
ik
k
Mota etiketatuak:
2016-05-05
62
OOP Ad
OOPa
Adan: sintaxia
i
i
Irudi
-X
Y
-Y
Adibidez (p
(pribatutasunaz baliatu ggabe):
)
type Irudi is tagged record
X Y : Float;
X,
end record;
Zirkulu
-Erradioa
Puntu
type Zirkulu
t
Zi k l is
i new Irudi
I di with
ith record
d
Erradioa : Float;
end record;
type Puntu is new Irudi with null record;
2016-05-05
63
A ik
Ariketa
Pertsonak
Programatzaileak
E
Ezaugarriak:
i k izena,
i
sexua.
Pertsonak dira.
dira
Ezaugarri berezia: lengoaia batean espezialistak.
2016-05-05
64
A ik
Ariketa:
soluzioa
l i
type Emakumea_Gizona is (Emakumea, Gizona);
type Pertsona is tagged
record
I
Izena
: Ad
Ada.Strings.Unbounded.Unbounded_String;
St i
U b
d d U b
d d St i
Sexua : Emakumea_Gizona;
end record;
Programatzaile
motak Pertsona
mota hedatzen du
mota-bihurketa
eragiketa
birdefinituaren
inplementazioa,
gurasoarenaz
baliatuz
2016-05-05
65
2016-05-05
irudiak.ads
irudiak-zirkuluak.ads
irudiak-puntuak.ads
66
OOPa Adan:
kl
klase-mailako
il k motakk
2016-05-05
68
OOPa Adan:
kl
klase-mailako
il k motakk
Adibidez:
TClass
T1Class
T2Class
T1
T2
T22Class
T21
T22
69
OOPa Adan:
kl
klase-mailako
il k motakk
2016-05-05
70
OOPa Adan:
kl
klase-mailako
il k motakk
TClass motako objektuen erazagupena:
S : String; -- gaizki!
S : String := "Kaixo"; --hasieratzean, luzera finkatzen da
Z : Irudi'Class; -- gaizki!
Z : Irudi'Class := Zirkulu'(X => 3.0, Y => 4.0, Erradioa => 17.5);
--hasieratzean, mota espezifikoa finkatzen da
2016-05-05
72
OOPa Adan:
kl
klase-mailako
il k motakk
Azpiprogramen parametro formal bezala ere erabil daitezke
TClass
T
Class motak:
2016-05-05
73
OOPa Adan:
kl
klase-mailako
il k motakk
Ohikoa da TClass motako aldagaien erakusleak erabiltzea:
P
P.all
type Int_Erak
-- erazagupenak
type Irudi
Irudi_Erakusle
Erakusle is access Irudiak
Irudiak.Irudi
Irudi'Class;
Class;
Irudi_Erak1, Irudi_Erak2 : Irudi_Erakusle;
is access Integer;
P : Int_Erak;
P := new Integer;
P.all := 5;
2016-05-05
74
OOPa Adan:
mota heterogeneoko datu-egiturak
N l iinplementatu
Nola
l
t t mota
t desberdinetako
d b di t k objektuz
bj kt eratutako
t t k datu-egiturak?
d t
it k?
...
Irudi Segida
Irudi_Segida
Aldea
X
Erradioa
X
OOPa Adan :
mota heterogeneoko datu-egiturak
2016-05-05
76
OOPa Adan:
mota heterogeneoko datu-egiturak
N l iinplementatu
Nola
l
t t mota
t desberdinetako
d b di t k objektuz
bj kt eratutako
t t k datu-egiturak?
d t
it k?
Hurrengoa
Irudi_Segida
Aldea
Erradioa
OOPa Adan :
mota heterogeneoko datu-egiturak
2016-05-05
78
2016-05-05
Transaction_Type
Deposit_Type
Check_Type
dispatchingeragiketa
(polimorfikoa)
79
2016-05-05
dispatchingeragiketa
(polimorfikoa)
80
2016-05-05
dispatchingeragiketa
(polimorfikoa)
81
2016-05-05
bi aukera
desberdin
datu-egitura
horiek
inplementatzeko
82
Azpiprograma
pp g
abstraktua: ggorputzik
p
ggabeko azpiprograma.
pp g
Azpiprograma abstraktu bat heredatzen duten mota ez-abstraktuak
behartuta daude azpiprograma hori inplementatzera.
2016-05-05
83
<azpiprograma abstraktua>:=
b
k
<azpiprograma-erazagupena> is abstract;
function Azalera (I : in Irudi) return Float is abstract;
2016-05-05
84
OOP Ad
OOPa
Adan: mota abstraktuak
b k k
2016-05-05
85
Puntu
+Azalera
Zirkulu
-Erradioa
+Azalera
Karratu
-Aldea
+Azalera
Zer inplementazio emango diogu goiko klaseko Azalera eragiketari? Batere ez,
metodo abstraktua izango da, dispatching-a bideratzea beste helbururik izango ez
duena.
Eta Irudi klasea bera ere abstraktua izango da: klase horren instantziarik ez da
existitzen puntuak,
existitzen,
puntuak karratuak,
karratuak zirkuluak...
zirkuluak existitzen dira (letra etzanak
abstraktutasuna adierazten du UML klase-diagrametan).
2016-05-05
86
Irudien hierarkia:
nola
l implementatu
i l
Adaz
Ad
2016-05-05
87
88
Irudiak: Irudi
mota abstraktua
package Irudiak is
erag. abstraktua
klase-mailako
parametrodun
eragiketak:
g
ez dira
primitiboak
end Irudiak;
2016-05-05
89
90
91
Irudiak: Zirkulu
pakete umea
package Irudiak.Zirkuluak is
type Zirkulu is new Irudi with private;
overriding
function Azalera (Z : Zirkulu) return Float;
overriding
idi
procedure Eraiki (Z : out Zirkulu);
-- zirkulu bat eraikitzen du, irudien eraikitzaileari deituz
-- (X eta Y eskuratzeko), eta, gero, erabiltzaileari erradioaren
-- balioa eskatuz
private
type Zirkulu is new Irudi with
record
Erradioa : Float;
end record;
eragiketa
birdefinituak
end Irudiak.Zirkuluak;
2016-05-05
92
dispatchingeragiketaren
inplementazioa
93
Irudiak: Puntu
package Irudiak.Puntuak is
type Puntu is new Irudi with private;
overriding
function Azalera (P : in Puntu) return Float;
-- procedure
d
Eraiki
iki (
(P : out Puntu);
)
-- ez dago zertan birdefinitu eragiketa eraikitzailea
-- heredatuarekin aski baita
eragiketa
birdefinitua
f
private
type Puntu is new Irudi with null record;
;
end Irudiak.Puntuak;
2016-05-05
94
dispatchingeragiketaren
inplementazioa
2016-05-05
95
Irudi-lista heterogeneo
b
baten
prozesamendua
d
with Irudiak.Puntuak, Irudiak.Zirkuluak,
Irudiak.Karratuak, Irudiak.Errektangeluak;
with Listak;
with Ada.Text_Io;
erakusle mota:
edozein irudi-mota
seinala
i l d
dezake
k
procedure Irudiak_Prozesatu is
type Irudi_Mota is (Puntua, Zirkulua, Karratua, Errektangelua);
type Irudi_Erakusle is access Irudiak.Irudi'Class;
package Irudi_Erakusle_Listak is new
Listak (Osagai => Irudi_Erakusle);
lista-pakete
generikoaren
instantziazioa,
irudi-erakusle
motarekin
package Irudi_Si
Irudi Si is new Ada.Text_Io.Enumeration_Io
Ada Text Io Enumeration Io (Irudi_Mota);
(Irudi Mota);
package Erreal_Si is new Ada.Text_Io.Float_Io (Float);
2016-05-05
96
Irudi-lista heterogeneo
b
baten
prozesamendua
d
procedure Irakurri_Sortu_Irudia
(O : out Irudiak.Irudi'Class;
O Erakuslea : out Irudi_Erakusle)
O_Erakuslea
Irudi Erakusle) is
begin
--Irudiak.Eraiki (O); -- dispatching deia
O.Eraiki; --dispatching-deia (Ada 2005-etik aurrerako OOP notazioa)
O Erakuslea := new Irudiak.Irudi
O_Erakuslea
Irudiak Irudi'Class'(O);
Class (O);
end Irakurri_Sortu_Irudia;
Irudi_Segida : Irudi_Erakusle_Listak.Lista;
P
Z
K
R
:
:
:
:
Irudiak.Puntuak.Puntu;
Irudiak.Zirkuluak.Zirkulu;
Irudiak.Karratuak.Karratu;
Irudiak
Irudiak.Errektangeluak.Errektangelu;
Errektangeluak Errektangelu;
Forma : Irudi_Mota;
Irudi_Erakuslea : Irudi_Erakusle;
Erantzuna : Character;
2016-05-05
irudien datuak
irakurri eta
eraikitzaileei deitu
irudi erakuslez
irudi-erakuslez
osatutako lista
97
Irudi-lista heterogeneo
b
baten
prozesamendua
d
begin
Irudi_Erakusle_Listak.Hutsa (Irudi_Segida);
Ada.Text_Io.Put_Line
Ada
Text Io Put Line (
("Irudiak
Irudiak sartu nahi dituzu (B/E)?");
(B/E)? );
Ada.Text_Io.Get (Erantzuna);
Ada.Text_Io.Skip_Line;
while Erantzuna = 'B' loop
Ada.Text_Io.Put_Line ("Zein motatako irudia sartu nahi duzu?");
Ada.Text_Io.Put_Line ("Puntua, Zirkulua, Karratua edo Errektangelua");
Irudi_Si.Get (Forma);
Ada.Text_Io.Skip_Line;
case Forma is
when Puntua =>
(1) irudia irakurri eta
Irakurri_Sortu_Irudia (P, Irudi_Erakuslea);
when Zirkulua =>
sortu;
Irakurri_Sortu_Irudia (Z, Irudi_Erakuslea);
(2)
erakuslea
sartu
when Karratua =>
listan
Irakurri_Sortu_Irudia (K, Irudi_Erakuslea);
when Errektangelua =>
Irakurri_Sortu_Irudia (R, Irudi_Erakuslea);
end case;
Irudi_Erakusle_Listak.Erantsi_B (Irudi_Segida, Irudi_Erakuslea);
Ada.Text_Io.Put_Line ("Irudi gehiago sartu nahi duzu (B/E)?");
Ada.Text_Io.Get
Ada
Text Io Get (Erantzuna);
Ada.Text_Io.Skip_Line;
end loop;
2016-05-05
98
Irudi-lista heterogeneo
b
baten
prozesamendua
d
declare --irudi-segidaren prozesatzea
Aurrekoaren Erakuslea : Irudi
Aurrekoaren_Erakuslea
Irudi_Erakusle
Erakusle :=
Irudi_Erakusle_Listak.Lehena (Irudi_Segida);
begin
-- listaratutako irudien azalerak, distantziak-eta inprimatu
while not Irudi_Erakusle_Listak.Hutsa_Da
Irudi Erakusle Listak Hutsa Da (Irudi_Segida)
(Irudi Segida) loop
Irudi_Erakuslea := Irudi_Erakusle_Listak.Lehena (Irudi_Segida);
Ada.Text_IO.Put
Ada
Text IO Put ("**
(
Azalera: ");
);
-- Erreal_Si.Put (Irudiak.Azalera (Irudi_Erakuslea.all), 3, 2, 0);
Erreal_Si.Put (Irudi_Erakuslea.all.Azalera, 3, 2, 0);
--(Ada 2005-etik aurrerako OOP notazioa)
-- goikoa Azalera-ren
Azalera ren deia dispatching
dispatching-deia
deia da (polimorfismoa)
Ada.Text_IO.Set_Col (25);
dispatching-a:
uneko irudiaren
azaleraren kalkulua
2016-05-05
99
Irudi-lista heterogeneo
b
baten
prozesamendua
d
Ada.Text_IO.Put ("Jatorritiko distantzia: ");
-- Erreal_Si.Put (Irudiak.Distantzia (Irudi_Erakuslea.all), 3, 2, 0);
Erreal_Si.Put
(Irudi_Erakuslea.all.Distantzia, 3, 2, 0);
ez dago dispatching-ik
-- (Ada 2005-etik aurrerako OOP notazioa)
-- Distantzia-ren deia: ez da dispatching-a
hor: Distantzia eta
Ada.Text Io.New Line;
Ada.Text_Io.New_Line;
Zabalago ez dira
eragiketa primitiboak
-- if Irudiak.Zabalago -- ez da dispatching-a
-(Irudi_Erakuslea.all, Aurrekoaren_Erakuslea.all) then
if Irudi_Erakuslea.all.Zabalago (Aurrekoaren_Erakuslea.all) then
-- (Ada
(Ad 2005 OOP-etik
OOP tik aurrerako
k OOP notazioa
t i
notazioa)
t i )
Ada.Text_IO.Put_Line ("-- Aurrekoa baino zabalagoa da irudi hau");
end if;
Irudi_Erakusle_Listak.Kopiatu
(Irudi_Erakusle_Listak.Hondarra (Irudi_Segida), Irudi_Segida);
Aurrekoaren_Erakuslea := Irudi_Erakuslea;
end loop;
end;
end Irudiak_Prozesatu;
Irudiak Prozesatu;
2016-05-05
100
Bihurketa
zilegi da
beheko
klaseetatik
ggoikoetarantz
2016-05-05
Bihurketa EZ da
zilegi goiko
klaseetatik
behekoetarantz
101
OOP Ad
OOPa
Adan: mota-bihurketak
bih k k
erregistroagregatua:
errregistro-mota
bateko
bate
o ba
balioa
oa
(literala)
--...
I := Irudi (Z); -- zirkulua irudi bihurtu
-- (erradioa galduz, jakina)
2016-05-05
102
OOP Ad
OOPa
Adan: iinterfazeak
f
k
2016-05-05
110
I
Interfazeak:
f
k adibidea
dibid
<<interfazea>>
Pertsona
Inprimagarri
-Izena: Unbounded_String
-Sexua: Sexu
+Eraiki(in
( Izena:String,in
g Sexua:(Emakumea,
(
Gi
Gizona),out
) t P:Pertsona)
PP t
)
+F_Izena(in P:Pertsona): String
+F_Sexua(in P:Pertsona): Sexu
+Inprimatu(in Obj:Inprimagarri)
Programatzaile
-Espezialista: Lengoaia
+Eraiki(in Izena:String,in Sexua:(Emakumea,
Gizona),in
), Espezialista:Lengoaia,
p
g
,
out P:Programatzaile)
PP
il )
+F_Espezializazioa(in P:Pertsona): Lengoaia
+Inprimatu(in P:Programatzaile)
Programatzaile
klasea behartuta
dago Inprimatu
inplementatzera
2016-05-05
111
Interfazeak (adibidea):
Pertsona klase gurasoa
with Ada.Strings.Unbounded;
with Ada.Text_IO;
package Pertsonak is
type Pertsona is abstract tagged private;
type Emakumea_Gizona is (Emakumea, Gizona);
package
p
g Sexua_IO is new Ada.Text_IO.Enumeration_IO (
(Emakumea_Gizona);
);
procedure Eraiki (Izena : in String;
Sexua : in Emakumea_Gizona;
P : out Pertsona);
function F_Izena (P : in Pertsona) return String;
function F_Sexua (P : in Pertsona) return Emakumea_Gizona;
private
type Pertsona is abstract tagged
record
Izena : Ada.Strings.Unbounded.Unbounded_String;
Sexua : Emakumea_Gizona;
end record;
end Pertsonak;
2016-05-05
112
Interfazeak (adibidea):
Inprimagarri interfazea
package Inprimagarriak is
type Inprimagarri is interface;
procedure Inprimatu (Obj : in Inprimagarri) is abstract;
end Inprimagarriak;
2016-05-05
113
Interfazeak (adibidea):
Programatzaile klase umea
with Ada.Text_IO;
with Inprimagarriak;
package Pertsonak.Programatzaileak is
type Programatzaile is new Pertsona and Inprimagarriak.Inprimagarri with private;
type Lengoaia is (Java, Ada2005, PHP, Perl, Prolog);
package Lengoaia_IO is new Ada.Text_IO.Enumeration_IO (Lengoaia);
procedure Eraiki (Izena : in String;
Sexua : in Emakumea_Gizona;
Espezialista : in Lengoaia;
P : out Programatzaile);
Programatzaile klasea:
(1) Pertsona klasearen
ume da;
(2) Imprimagarri
interfazea inplementatzen
d
du
2016-05-05
114
motabihurketa
eraikitzailearen
inplementazioa,
gurasoaren
eraikitzaileari deituz
g
;
end Pertsonak.Programatzaileak;
s
2016-05-05
115
Interfazeak (adibidea):
Nagusia proba-programa
with Pertsonak.Programatzaileak;
with Ada.Text_IO;
procedure Nagusia is
P : P
Pertsonak.Programatzaileak.Programatzaile;
t
k P
t il k P
t il
begin
Pertsonak.Programatzaileak.Eraiki ("Bea",
Pertsonak.Emakumea,
Pertsonak.Programatzaileak.PHP,
P);
-- erag. heredatuari deituz ("betiko" notazioa):
Ada.Text_IO.Put (Pertsonak.Programatzaileak.F_Izena (P) & " ");
-- erag. heredatuari deitzen zaio hemen ere, baina "objektua.notazioa" erabiliz:
Pertsonak.Sexua_IO.Put (P.F_Sexua);
Ada Text IO Put ("
Ada.Text_IO.Put
( ");
);
Pertsonak.Programatzaileak.Lengoaia_IO.Put (P.F_Espezializazioa);
Ada.Text_IO.New_Line (2);
Pertsonak.Programatzaileak.Eraiki ("Mari",
Pertsonak.Emakumea,
Pertsonak.Programatzaileak.Ada2005,
P);
Ada.Text_IO.Put_Line ("Inprimatu eragiketaz baliatuz: ");
P.Inprimatu; -- "objektua.notazioa" erabiliz
g
;
end Nagusia;
2016-05-05
116
UML eta kl
klase-hierarkiak
hi
ki k
<<interfazea>>
Pertsona
Inprimagarri
-Izena: Unbounded_String
-Sexua: Sexu
+Eraiki(in
( Izena:String,in
g Sexua:(Emakumea,
(
Gi
Gizona),out
) t P:Pertsona)
PP t
)
+F_Izena(in P:Pertsona): String
+F_Sexua(in P:Pertsona): Sexu
+Inprimatu(in Obj:Inprimagarri)
Programatzaile
-Espezialista: Lengoaia
+Eraiki(in Izena:String,in Sexua:(Emakumea,
Gizona),in
), Espezialista:Lengoaia,
p
g
,
out P:Programatzaile)
PP
il )
+F_Espezializazioa(in P:Pertsona): Lengoaia
+Inprimatu(in P:Programatzaile)
Klasea batek
interfaze bat
inplementatzen du
2016-05-05
117
J
Java
vs Ada
Ad
2016-05-05
118
J
Java
vs Ada
Ad
Modulartasuna:
Herentzia:
2016-05-05
119