Вы находитесь на странице: 1из 29

lnLroduccln a la rogramacln

CrlenLada a Cb[eLos
ConLenldo
Lvolucln de los lengua[es de programacln
Lvolucln hlsLrlca
AbsLraccln procedlmenLal y de daLos
ConcepLos bslcos de la . C. C.
Clases y ob[eLos
MeLodos y mensa[es
ollmorsmo y vlnculacln dlnmlca
Perencla / Composlcln
Clases absLracLas
2
Lvolucln de los lengua[es de
programacln
A
B
S
T
R
A
C
C
I

N

O
P
E
R
A
C
I
O
N
A
L
A
B
S
T
R
A
C
C
I

N

D
E

D
A
T
O
S
Lenguajes
Mquina /
Ensamblador
Cd.Inst.Simb.
Macros
Id = Dir Mem.
Manip.Total de
Datos
FORTRAN
Subrutinas
Funciones
Id. Simb.
Tipos
Oper. restring.
PASCAL
Anidamiento
Subprogramas
Registros
Tipos definidos
Gest. Din. Mem
MODULA-2
ADA
Encapsulam.
Octult. Inform.
Espec - Impl
Tipo
Abstracto de
Datos
Lenguajes
Orientados a
Objetos
Objetos
Mtodos
Mensajes
3
Lvolucln de los lengua[es de
programacln
COMPONENTES
SERVICIOS
A
B
S
T
R
A
C
C
I

N

O
P
E
R
A
C
I
O
N
A
L
A
B
S
T
R
A
C
C
I

N

D
E

D
A
T
O
S
Lenguajes
Mquina /
Ensamblador
Cd.Inst.Simb.
Macros
Id = Dir Mem.
Manip.Total de
Datos
FORTRAN
Subrutinas
Funciones
Id. Simb.
Tipos
Oper. restring.
PASCAL
Anidamiento
Subprogramas
Registros
Tipos definidos
Gest. Din. Mem
MODULA-2
ADA
Encapsulam.
Octult. Inform.
Espec - Impl
Tipo
Abstracto de
Datos
Lenguajes
Orientados a
Objetos
Mtodos
Mensajes
Objetos
IDLs
Invocacin remota
Componentes
4
ConcepLos bslcos de la .C.C.
Clases y ob[eLos
MeLodos y mensa[es
Perencla
ollmorsmo y vlnculacln dlnmlca
Clases absLracLas e lnLerfaces
5
Clases y Cb[eLos
CLASE = MDULO + TIPO
o Criterio de estructuracin del cdigo
o Estado + Comportamiento
o Entidad esttica (en general)
OBJETO = Instancia de una CLASE
o Objeto (Clase) = Valor (Tipo)
o Entidad dinmica
o Cada objeto tiene su propio estado
o Objetos de una clase comparten su comportamiento
6
(1, 3)
(2, 2)
(2, 1)
(5, 2.5)
ANIMAL
VEHCULO
FIGURA
PUNTO
7
MeLodos y mensa[es
!"#$%$&: denen el comporLamlenLo de una clase




lnvocacln de '"#$%$&: aso de '()&*+(&
$-+.'()&/*01&2 '()&/$-+3 *01&2
(Punto)
x = 1
y = 3
(Punto)
x = 2
y = 2
Punto
x, y: double
trasladar(a, b)
distancia(pto)
Estado
Comportamiento
pto.trasladar(1, -1)

8
4#$
Punto
aso de mensa[es
Los mensa[es que se envlan a un deLermlnado ob[eLo deben
corresponderse" con los meLodos que la clase uene denldos.
LsLa correspondencla se debe ree[ar en la slgnaLura del
meLodo: nombre, argumenLos y sus upos.
Ln los lengua[es orlenLados a ob[eLos con comprobacln de
upos, la emlsln de un mensa[e a un ob[eLo que no uene
denldo el meLodo correspondlenLe se deLecLa en uempo de
compllacln.
Sl el lengua[e no reallza comprobacln de upos, los errores en
uempo de e[ecucln pueden ser lnesperados.
9
public class Punto {
private double x, y;
public Punto() { x = y = 0; }
public Punto(double a, double b) { x = a; y = b; }
public double abscisa() {return x;}
public double ordenada() {return y;}
public void abscisa(double a){ x = a; }
public void ordenada(double b){ y = b; }
public void trasladar(double a, double b) {
x += a; y += b;
}
public double distancia(Punto pto) {
return Math.sqrt(Math.pow(x - pto.x, 2) +
Math.pow(y - pto.y, 2));
}
}

Clases
5&#067#60*& 86( ()7*4&69*) !"#$% : &'#$!$%

P
u
n
t
o
.
j
a
v
a


VARIABLES DE ESTADO
CONSTRUCTORES
MTODOS
10
public class Punto {
private double x, y;

public Punto(double a, double b) {
x = a; y = b;
}

public void trasladar(double a, double b) {
x += a; y += b;
}
public double distancia(Punto p) { }
};
pto.trasladar(3, -1);
11
pto
Punto pto
Punto
x

y
1
new Punto(1, 1);
1
4
0
=
Composlcln
Mecanlsmo que permlLe la creacln de nuevos ob[eLos a parur de
oLros ya lmplemenLados.
8esponde a una relacln de upo !"#$#% o #'() *+,-.#'(+ -+/".
Asl, por e[., un segmenLo uene dos punLos (orlgen y exLremo)
1amblen podemos declr que los punLos orlgen y exLremo forman parLe del"
segmenLo, o que el segmenLo esL compuesLo por" dos punLos
Punto
x, y: double
trasladar(a, b)
distancia(pto)
Segmento
trasladar(a, b)
longitud()
origen
extremo
12
Composlcln
public class Segmento {
private Punto origen, extremo;
public Segmento(double x1, double y1, double x2, double y2) {
origen = new Punto(x1, y1);
extremo = new Punto(x2, y2);
}

... // Otros mtodos

public double longitud() {
return origen.distancia(extremo);
}
}
13
ara calcular la longlLud de un
segmenLo se uullza el meLodo
dlsLancla de la clase unLo
CLros e[emplos de composlcln
CLros e[emplos:
un vecLor puede lmplemenLarse con un punLo que represenLa el exLremo
del vecLor cuando su orlgen esL en el orlgen de coordenadas.
Ll vecLor uene un punLo.




una recLa podrla lmplemenLarse con un vecLor y un punLo. Ll punLo es uno
cualqulera de la recLa y el vecLor proporclona la dlreccln de la mlsma.
La recLa "uene" o esL denlda por" un punLo y un vecLor

14
Vector(5, 2)
Vector(5, 2)
Punto(-3, 4)
Ms e[emplos de composlcln
La composlcln de una clase depender del uso que se haga con
sus ob[eLos.

una persona uene una edad (que se represenLa con un enLero) y un
nombre (que se represenLa con un SLrlng).
una persona uene un nombre (que se represenLa con un SLrlng) y un unl
(que se represenLa con oLro SLrlng)
una persona uene edad, unl, curso, aslgnaLuras, eLc.
un coche uene un modelo (que se represenLa por un SLrlng) y un preclo
(que se represenLa con un oaL)
un coche esL compuesLo por un moLor, 4 puerLas, 4 ruedas, chasls, eLc.

15
Perencla
nueva poslbllldad para
reuullzar cdlgo
Algo ms que:
lnclulr cheros, o
lmporLar mdulos
ermlLe claslcar las clases
en una [erarqula
8esponde a la relacln
es un"

FiguraCerrada
Polgono Elipse
Crculo Cuadriltero Pentgono
Rombo
Rectngulo
16
Perencla
una subclase dlspone de las varlables y
meLodos de la superclase, y puede
anadlr oLros nuevos.
La subclase puede modlcar el
comporLamlenLo heredado (por
e[emplo, redenlendo algun meLodo
heredado) .
La herencla es Lransluva.
Los ob[eLos de una clase que hereda
de oLra pueden verse como ob[eLos de
esLa uluma.
Punto
Partcula
Padres / Ascendientes /
Superclase
Hijos / Descendientes /
Subclase
17
public class Partcula extends Punto {
protected double masa;
final static double G = 6.67e-11;

public Partcula(double m) {
this(0, 0, m);
}
public Partcula(double a, double b, double m) {
super(a, b);
masa = m;
}
public void masa(double m) { masa = m; }
public double masa() { return masa; }
public double atraccin(Partcula part) {
double d = this.distancia(part);
return G * masa * part.masa() / (d * d);
}
}
18
Se reere a
arucula(double, double,
double)
Se reere a
unLo(double, double)
8edenlcln del comporLamlenLo
Ls muy corrlenLe la redenlcln de un meLodo en la subclase.
La redefinicin puede impedirse mediante el uso del
calificador final.
Polgono
permetro( ): double
Cuadrado
permetro( ): double
lado: double
Suma de distancias entre
puntos consecutivos
Resultado = 4 * lado
19
Perencla vs. composlcln
MlenLras que la herencla esLablece una relacln de upo #'0.$", la
composlcln responde a una relacln de upo uene" o #'()
*+,-.#'(+ -+/".
Asl, por e[emplo, una parucula (& 6) punLo (con masa), mlenLras
que un segmenLo ;()( dos punLos (orlgen y exLremo)
Punto
x, y: double
trasladar(a, b)
distancia(pto)
Partcula
masa: double
atraccin(part)
Segmento
trasladar(a, b)
longitud()
origen
extremo
20
ollmorsmo sobre los daLos
un lengua[e uene capacldad pollmrca sobre los daLos cuando
una varlable declarada de un upo (o clase) -"-+ #'()"*+- deLermlnado
puede hacer referencla en uempo de e[ecucln a valores (ob[eLos) de upo
(clase) dlsunLo -"-+ 12$),2*+ -.
La capacldad pollmrca de un lengua[e no suele ser lllmlLada, y en
los LCCs esL hablLualmenLe resLrlnglda por la relacln de
herencla:
Ll upo dlnmlco debe ser descendlenLe del upo esLuco.
Punto pto = new Partcula(3, 5, 22);
21
1lpo esLuco
de pto
1lpo dlnmlco
de pto
ollmorsmo sobre los daLos
una varlable puede referlrse a ob[eLos de clases dlsunLas de la
que se ha declarado. LsLo afecLa a:
aslgnaclones expllclLas enLre ob[eLos,
paso de parmeLros,
devolucln del resulLado en una funcln.
La resLrlccln dada por la herencla permlLe consLrulr esLrucLuras
con elemenLos de naLuraleza dlsunLa, pero con un
comporLamlenLo comun:
22
Punto pto = new Punto();
Partcula part = new Partcula(2);
Java
(Partcula)
x = 0
y = 0
m = 2
(Punto)
x = 0
y = 0
part pto
pto = part; // Asignacin correcta
part = pto; // Asignacin incorrecta
part = (Partcula) pto; // Peligroso
(Partcula)
x = 0
y = 0
m = ??
23
vlnculacln dlnmlca
La vlnculacln dlnmlca resulLa el complemenLo lndlspensable del
pollmorsmo sobre los daLos, y conslsLe en que:
La lnvocacln del meLodo que ha de resolver un mensa[e se reLrasa al
uempo de e[ecucln, y se hace depender del upo dlnmlco del ob[eLo
recepLor.
Polgono
Cuadrado
permetro{^...}
permetro{^4*lado}
:Polgono
:Cuadrado
obj : Polgono
p
e
r
m
e
tr
o
?

24
Ll compllador admlur la expresln
obj.permetro();
sl el upo esLuco de obj (es declr la clase Polgono) acepLa el
mensa[e permetro(), aunque para resolver uullce vlnculacln
dlnmlca (es declr, el meLodo permetro() de la clase Cuadrado)
public class PuntoAcotado extends Punto {
private Punto esquinaI, esquinaD;

public PuntoAcotado() { }
public PuntoAcotado(Punto eI, Punto eD) { }
public double ancho() { }
public double alto() { }
public void trasladar(double a, double b) {
super.trasladar(a, b);
if (abscisa() < esquinaI.abscisa())
abscisa(esquinaI.abscisa())
if (abscisa() > esquinaD.abscisa())
abscisa(esquinaD.abscisa())
if (ordenada() < esquinaI.ordenada())
ordenada(esquinaI.ordenada())
if (ordenada() > esquinaD.ordenada())
ordenada(esquinaD.ordenada())
}
}
25
PuntoAcotado pac = new PuntoAcotado(eI, eD);
PuntoAcotado
x= 0
y= 0
pac
public class Punto {
private double x, y;
public Punto() { }

public void trasladar(double a, double b) {
x += a; y += b;
}
public double distancia(Punto p) { }
}
Punto eI = new Punto(0, 0);
Punto eD = new Punto(5, 5);
PuntoAcotado
x = 2
y = 5
pto
Punto pto;
pto = pac;
pto.trasladar(2, 7);
t
r
a
s
l
a
d
a
r
(
2
,

7
)

V
I
N
C
U
L
A
C
I

N

D
I
N

M
I
C
A
26
Clases absLracLas
Clases de la que no se pueden crear lnsLanclas
ueden declarar meLodos sln lmplemenLar
MeLodos absLracLos
Las subclases esLn obllgadas a lmplemenLarlas
Se pueden declarar varlables cuyo upo
esLuco sea una clase absLracLa que puedan
referlrse a ob[eLos de dlversas clases
descendlenLes
27
= new Polgono();
abstract public class Polgono {
private Punto vrtices[];
public void trasladar(double a, double b){
for (int i = 0; i < vrtices.length; i++)
vrtices[i].trasladar(a, b);
}
public double permetro() {
double per = 0;
for (int i = 1; i < vrtices.length; i++)
per = per + vrtices[i - 1].distancia(vrtices[i]);
return per
+ vrtices[0].distancia(vrtices[vrtices.length]);
}
abstract public double rea();
}
MTODO ABSTRACTO
Polgono pol
Java
CLASE ABSTRACTA
28
Clases absLracLas
Las clases absLracLas denen un proLocolo comun
en una [erarqula de clases.
Cbllgan a sus subclases a lmplemenLar los
meLodos que se declararon como absLracLos.
ue lo conLrarlo, esas subclases se slguen conslderando
absLracLas.
Ln !ava, adems de clases absLracLas se pueden
denlr 2$(#/34*#' (que se pueden conslderar
clases compleLamenLe" absLracLas).
29

Вам также может понравиться