PDF de programación - TEMA 2 Clases y Objetos

Imágen de pdf TEMA 2 Clases y Objetos

TEMA 2 Clases y Objetosgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 1 de Diciembre del 2017)
477 visualizaciones desde el 1 de Diciembre del 2017
716,5 KB
64 paginas
Creado hace 15a (06/10/2005)
Programación Orientada a Objetos

TEMA 2

Clases y Objetos

Facultad de Informática
Universidad de Murcia

Índice

Introducción

1.
2. Clases
3. Objetos
4. Semántica referencia vs. Semántica almacenamiento
5. Métodos y mensajes
6. Ejemplo: representación de una lista enlazada
7. Creación de objetos
8. Modelo de ejecución OO
9. Semántica de las operaciones sobre referencias:

asignación, igualdad y copia

10. Genericidad

Clases y Objetos

2

•1

1.- Introducción

Programa OO

Clase

Objeto

Colección estructurada

de clases

Implementación de un TAD

Una instancia de una clase

Los objetos se comunican mediante mensajes

Clases y Objetos

3

2.- Clases

• DEFINICIÓN: Implementación total o parcial de un TAD
• Entidad sintáctica que describen objetos que van a tener la

misma estructura y el mismo comportamiento.

• Doble naturaleza: Módulo + Tipo de Datos

– Módulo (concepto sintáctico)

• Mecanismo para organizar el software
• Encapsula componentes software

– Tipo (concepto semántico)

• Mecanismo de definición de nuevos tipos de datos: describe una

estructura de datos (objetos) para representar valores de un
dominio y las operaciones aplicables.

Clases y Objetos

4

•2

Ejemplo Modula2: Módulo ≠ Tipo

DEFINITION MODULE Pila;

EXPORT QUALIFIED PILA, vacia, pop, push, tope;
TYPE PILA;

PROCEDURE vacia(pila:PILA): BOOLEAN;
PROCEDURE nuevaPila: PILA;
PROCEDURE pop (VAR pila:PILA):INTEGER;
PROCEDURE push (VAR pila:PILA; valor:INTEGER);
PROCEDURE tope (VAR pila:PILA):INTEGER;

END Pila;

Clases y Objetos

5

Especificación separada de la implementación

PROCEDURE pop (VAR pila:PILA):INTEGER;
VAR rslt:INTEGER; tmp:PILA;
BEGIN

rslt:=0;
IF (pila <>NIL)
BEGIN

rslt:=pila^.valor;
tmp:=pila;
pila:=pila^.siguiente;
delete(tmp);

IMPLEMENTATION MODULE Pila;

TYPE PILA = POINTER TO Node;

Node = RECORD

valor:INTEGER;
siguiente:PILA;

END;

END;
RETURN rslt;
END pop;
...

END Pila;

Clases y Objetos

6

•3

Componentes de un clase

• Atributos

– Determinan una estructura de almacenamiento para cada

objeto de la clase

• Rutinas (Métodos)

– Operaciones aplicables a los objetos
– Único modo de acceder a los atributos

Ejemplo: Al modelar un banco, encontramos objetos “cuenta”.

Todos los objetos “cuenta” tienen propiedades comunes:

• atributos: saldo, titular, ...
• operaciones: reintegro, ingreso, …

Definimos una clase CUENTA.

Clases y Objetos

7

Ejemplo: Clase Cuenta

Cuenta

titular: String;
saldo: float;
reintegro(valor:float);
ingresar (valor:float);

Tiempo de ejecución

Definición de la clase

Atributos

Métodos

“José Martínez”

1200.0

titular
saldo

Objeto Cuenta

Clases y Objetos

8

•4

Relaciones entre clases

• Clientela

Persona titular;

class Cuenta{
Una clase A es cliente de una clase B, si A contiene una
declaración en la que se establezca que cierta entidad

class CuentaAhorro extends Cuenta{
(atributo, parámetro, variable local) e es de tipo B (e:B)
}

}

• Herencia

Una clase es una versión especializada de otra existente

Ejemplo:

Cuenta

titular

Persona

CuentaAhorro

CuentaCorriente
Cuenta es cliente de Persona
CuentaAhorro es una especialización de Cuenta

Clases y Objetos

9

class CUENTA
creation abrir

feature {ALL}
































































end
















e
s
a
l
c

e
d

n
ó
i
c
i
n
i
f
e
d

o
l
p
m
e
j
E

l

e
f
f
i
E

n
e





titular : PERSONA;
saldo : INTEGER;
codigo: INTEGER;

abrir (quien: PERSONA) is do








end;

reintegro (suma: INTEGER) is do

end;

saldo:=0;
titular:=quien;
codigo:= codigos.nuevo_codigo;
!!ultOper










ingreso (suma: INTEGER) is do

saldo:=saldo+suma
end;







ver_ult_oper (n: INTEGER) is do … end;
….





feature {NONE}





ultOper: LIST[INTEGER];
puedo_sacar (suma: INTEGER): Boolean is do

end;

Result:= saldo>=suma





















-- caracteristicas públicas

if puedo_sacar(suma) then saldo:=saldo-suma;



-- rutina para sacar dinero

-- rutina de creación



-- codigos función ONCE













-- rutina para ingresar dinero

-- visualiza las n ultimas oper.

-- at y rutinas privadas

Clases y Objetos

10

•5

Clases en Eiffel

• Abstracción de tipos
– Atributos: saldo:INTEGER

• exportados en modo consulta (Principio de Acceso Uniforme)
• Sólo modificables por los métodos de la clase aunque sean

públicos
– Rutinas:

• procedimientos: ingreso(suma:INTEGER)is do ...end
• funciones:
puedo_sacar(suma:INTEGER):BOOLEAN is do ...end

– Variables de clase:

• Eiffel no tiene variables globales
• Funciones once = El objeto se crea sólo una vez pero puede
cambiar su valor

Clases y Objetos

11

Clases en Eiffel

• Ocultación de información

Especificación de acceso a un grupo de características:
– públicas: (por defecto)
– privadas:
– exportadas de forma selectiva.

feature {ALL}
feature {NONE}
feature {A,B, ...}

• Modularidad

– El único módulo son las clases
– Cluster = Agrupación de clases relacionadas pero no es
parte del lenguaje sino que depende del entorno de
desarrollo

– Para hacer uso de un cluster se debe decir al entorno Eiffel

Clases y Objetos

12

•6

Eiffel y Ocultación de Información

class ICE1 feature

at1: INTEGER;
...

end
class TEC1 feature

//Público

atrib1: ICE1;
atrib2: INTEGER;
una_rutina (p: INTEGER) is do

atrib2:= p;
atrib2:= atrib1.at1;
at1:= p;
atrib1.at1:= p;

end;

end

Exportación de atributos

-- clase Eiffel
en modo consulta
(=función)

-- (cid:49) No error
-- (cid:49) Error en compilación
-- (cid:49) Error en compilación
atrib1.setAt1(p);

Modificación:

Clases y Objetos

13

// Cuenta.h, definición del TAD Cuenta


e
d

n
ó
i
c
i
n
i
f
e
d

e
d

o
l
p
m
e
j
E

)
z
a
f
r
e
t
n
i
(

+
+
C

n
e

e
s
a
l
c

class Cuenta {

public:

Cuenta (Persona *quien) {saldo=0;

titular=quien;
codigo = nuevoCodigo();
ultOper = new lista<int>;}



reintegro(int suma);
void
ingreso(int suma);
void
verSaldo();
int
void
verUltOper(int n);
static int nuevoCodigo();

//devuelve el ultimoCodigo y lo incrementa

private:

Persona * titular;
int
int
static int ultimoCodigo; //variable de clase
lista<int> * ultOper;

saldo;
codigo;

bool

puedoSacar(int suma) {return (saldo >=suma);}

};

Clases y Objetos

14

•7


e
d

n
ó
i
c
i
n
i
f
e
d

e
d

o
l
p
m
e
j
E

)
n
ó
i
c
a
t
n
e
m
e

l
p
m

i
(
+
+
C

e
s
a
l
c

// cuenta.cpp, Definición de las funciones de la clase

#include “cuenta.h”

// inicializa la variable de clase
int Cuenta :: ultimoCodigo = 0;

void

}

void

}

int

}

void

}

Cuenta :: reintegro (int suma) {

if puedoSacar(suma) saldo=saldo-suma;

Cuenta :: ingreso (int suma) {

saldo=saldo+suma;

Cuenta :: verSaldo () {

return saldo;

Cuenta :: verUltOper(int n) {
...

static int Cuenta :: nuevoCodigo() {

return (ultimoCodigo++);

}

Clases y Objetos

15

Clases en C++

• Abstracción de tipos

– atributos.

• No pueden ser exportados en modo consulta
• Tipos primitivos y punteros

– todas las rutinas tienen un valor de retorno.
– Atributos y métodos de clase (static)

• Ocultación de información

– Especificación de acceso para un grupo de miembros:

•public: un cliente puede consultarlo y ¡¡modificarlo!!
•private: sólo accesible dentro de la clase

– Clases amigas: Se le concede acceso TOTAL a la clase amiga
16

Clases y Objetos

•8

Clase “amiga”

class NodoArbol {

friend class Arbol;
private:

class B {

friend class A;
private:

int i;

public: ...

}
En la clase A,
B *ob
ob -> i = 89

int dato;
NodoArbol decha;
NodoArbol izda;


};
class Arbol{

private:

NodoArbol *raiz;
...

… raiz ->dato=50; ...

La amistad no es hereditaria ni transitiva

};

Clases y Objetos

17

Clases en C++

• Modularidad

– Definición de nuevos tipos: clases (class) y estructuras
(struct)
– Una estructura equivale a una clase con todos los miembros

públicos por defecto (se puede usar private)
– namespace: mecanismo para agrupar datos, funciones, etc.
relacionadas dentro de un espacio de nombres separado

namespace Parser {

double term(bool obten){/*multiplica y divide */}
double expr(bool obte) {/*suma y resta */}


}
Para usar una función: Parser::expr(…);

Clases y Objetos

18

•9

Ficheros para la especificación de la clase
Cuenta

Cuenta.h

Interfaz de la clase
cuenta

Banco.cpp

Cuenta.cpp

#include “Cuenta.h”
utiliza Cuenta

#include “Cuenta.h”
implementa Cuenta

• #include para importar ficheros cabecera



• toda la información se use o no
• pueden ocurrir dependencias circulares que debe solucionar

el programador en lugar del compilador

Clases y Objetos

19

Ejercicio

Intenta escribir en C++ la siguiente clase Eiffel,

class CELOSO

feature {NONE}

esposa: MUJER;

feature {MECANICO}

coche: AUTOMOVIL



end

Clases y Objetos

20

•10


e
d

n
ó
i
c
i
n
i
f
e
d

e
d

o
l
p
m
e
j
E

a
v
a
J

n
e

e
s
a
l
c

// Cuenta.java, declaración de la clase Cuenta ((cid:198) .class por cada clase al compilar)

package gestiondecuentas;
import java.util.*;
public class Cuenta {

private Persona titular;
saldo;
private int
private int
codigo;
private static int ultimoCodigo; //variable de clase
private int [] ultOper;













public Cuenta (Persona quien) {saldo=0;

titular=quien;
codigo = nuevoCodigo();
ultOper = new int[20];}



public void
{ ... }

public void

{ ... }

reintegro(int suma)

ingreso(int suma)

public int

public void

verSaldo() { ... }
verUltOper(int n) { ... }





public static int nuevoCodigo() {return ultimoCodigo++}




private boolean puedoSacar(int suma) {return (saldo >=suma);}
}

Clases y Objetos

21

Clases en Java

• Abstracción de tipos
– no existen los punteros
– tipos primitivos y referencias
– Variables y mét
  • Links de descarga
http://lwp-l.com/pdf7759

Comentarios de: TEMA 2 Clases y Objetos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad