PDF de programación - TEMA 2 Clases y Objetos (2ª parte)

Imágen de pdf TEMA 2 Clases y Objetos (2ª parte)

TEMA 2 Clases y Objetos (2ª parte)gráfica de visualizaciones

Publicado el 7 de Julio del 2017
865 visualizaciones desde el 7 de Julio del 2017
581,8 KB
74 paginas
Creado hace 16a (21/11/2007)
Programación Orientada a Objetos

TEMA 2

Clases y Objetos

(2ª parte)

Facultad de Informática
Universidad de Murcia

Índice

1. Clases Eiffel, C++ y C#
2. Objetos

- Tipos de campos: referencia vs. subobjeto

3. Métodos y mensajes
4. Creación de objetos
5. Ejemplo: representación de una lista enlazada
6. Semántica de las operaciones sobre

referencias: asignación, igualdad y copia

7. Genericidad

Clases y Objetos

2

1.- Clases en Eiffel, C++ y C#

MARCO DE COMPARACIÓN (Modelo OO):

• Abstracción de tipos:

– Definición de atributos y métodos
– Atributos de clase vs. Atributos de instancia

• Ocultación de información:

– Niveles de visibilidad

• Modularidad:

– Tipos de módulos que permite el lenguaje

Clases y Objetos

3





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

4

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

5

Función once

codigos: Contador is

once --devuelve siempre el mismo objeto Contador
end

--crea un objeto contador

!!Result

• 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

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

7

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

8


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

// 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
verUltOper(int n);
void
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

9


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

10

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
11

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

12

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

13

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

14

Ejercicio

Intenta escribir en C++ la siguiente clase Eiffel,

class CELOSO

feature {NONE}

esposa: MUJER;

feature {MECANICO}

coche: AUTOMOVIL



end

Clases y Objetos

15

using System;
namespace Banco.GestionCuentas{

public class Cuenta {
private Persona titular;
private float saldo;
private int codigo;
private static int ultimoCodigo;
private Operacion[] ultOper;
Cuenta (Persona quien){

saldo=0;
titular=quien;
codigo=nuevoCodigo();
ultOper=new Operacion[20];


e
d

n
ó
i
c
i
n
i
f
e
d

e
d

o
l
p
m
e
j
E

#
C

n
e

e
s
a
l
c

}
static Cuenta(){ //constructor de clase
}

ultimoCodigo=1;

public float Saldo{

get{
}

return saldo;

saldo+=suma;

}
public virtual void Reintegro(float suma){
if puedoSacar(suma) saldo-=suma;
}
public virtual void Ingreso(float suma){
}
public void VerUltOper(int n) { ... }
public static int NuevoCodigo(){
}
private boolean puedoSacar(float suma){
}

return ultimoCodigo++;

return (saldo >=suma);

}

}

Clases y Objetos

16

Clases en C#

• Abstracción de tipos

– especificación de atributos y métodos igual que Java
– Atributos y métodos de clase (static)

• Ocultación de Información

– public y private igual que Java y C++
– internal: accesible desde el código del ensamblado

(librería o ejecutable)

– Proteger el acceso a los atributos mediante la definición de

propiedades (principio de Acceso Uniforme)
– Se escribe el código que se ejecutará en el acceso para lectura
(get) y modificación (set) de un atributo privado de igual
nombre que la propiedad.

Clases y Objetos

17

Definición de propiedades en C#

<tipoPropiedad> <nombrePropiedad>
{

set
{

}
get
{

}

}

<códigoEscritura>

<códigoLectura>

• Puede ser una propiedad de sólo lectura (sólo se define el

get) o de sólo escritura (sólo se define el set).

Clases y Objetos

18

Ejemplo de propiedad C#
class Cuenta{


public double Saldo
{

total = total + ultOper[i];

get
{
double total = 0;
for …
return total;
}
set
{
}

ultOper[indice]= value;

Clases y Objetos

19

}

}
• Acceso a una propiedad como si estuviéramos accediendo a uno de los

campos del objeto
Cuenta cta = new Cuenta();
cta.Saldo = 300;

Clases en C#

• Modularidad

– Definición de nuevos tipos: clases, estructuras e interfaces
– Agrupación de tipos de datos en espacios de nombres

(equivalente a los paquetes de Java)
namespace nombreEspacio{
…//tipos pertenecientes al espacio de nombres
}

– Para utilizar un tipo definido en un espacio de nombres:

•using: para importar los tipos definidos en un espacio de
nombres

• Calificar el tipo utilizando la notación punto.

Clases y Objetos

20

Exportación de características entre clases
relacionadas
• ¿Cómo exportar características a un conjunto de clases

sin violar la regla de ocultación de información?

• Soluciones:
Java
– Paquetes
C++
– Clases amigas
– Exportación selectiva Eiffel

• Los paquetes añaden complejidad al lenguaje.
• Con las soluciones de Java y C++ se corre el riesgo de

perjudicar la reutilización.

Clases y Objetos

21

Ejercicio

[Examen 2/12/2005] Dada la implementación parcial de la
clase Bola en Eiffel que representa una bola en un juego
de billar, especificar una clase Java equivalente,
explicando TODAS
  • Links de descarga
http://lwp-l.com/pdf5009

Comentarios de: TEMA 2 Clases y Objetos (2ª parte) (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