PDF de programación - TEMA 2 Clases y Objetos - Programación Orientada a Objetos

Imágen de pdf TEMA 2 Clases y Objetos - Programación Orientada a Objetos

TEMA 2 Clases y Objetos - Programación Orientada a Objetosgráfica de visualizaciones

Publicado el 31 de Mayo del 2018
1.204 visualizaciones desde el 31 de Mayo del 2018
718,8 KB
65 paginas
Creado hace 17a (09/10/2006)
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



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_valor;
!!ultOper



ingreso (suma: INTEGER) is do

saldo:=saldo+suma
end;



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

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



feature {NONE}



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

end;

Result:= saldo>=suma



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



-- rutina para sacar dinero



-- caracteristicas públicas

-- 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

Función once

codigos: Contador is

!!Result

once --devuelve siempre el mismo objeto Contador
end

--crea un objeto contador

• El objeto contador que devuelve se puede modificar utilizando

los métodos de la clase contador. Por ejemplo:

codigos.nuevo_valor

Siendo nuevo_valor un método de la clase Contador que

incrementa el valor del contador (de tipo INTEGER) y
devuelve ese nuevo valor.

Clases y Objetos

12

•6

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{}
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

13

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)

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

Modificación:

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

)
z
a
f
r
e
t
n
i
(

+
+
C

n
e

e
s
a
l
c


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.h, definición del TAD Cuenta

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

15

// 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

16

•8

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
17

Clases y Objetos

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

18

•9

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

19

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

20

•10

Ejercicio

Intenta escribir en C++ la siguiente clase Eiffel,

class CELOSO

feature {NONE}

esposa: MUJER;

feature {MECANICO}

coche: AUTOMOVIL



end

Clases y Objetos

21


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 ( .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
{ ... }
  • Links de descarga
http://lwp-l.com/pdf11486

Comentarios de: TEMA 2 Clases y Objetos - Programación Orientada a 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