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
399 visualizaciones desde el 7 de Julio del 2017
553,0 KB
37 paginas
Creado hace 12a (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

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

•2

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

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

6

•3

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

•4


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

9

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

•5

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

•6

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

•7

Ejercicio

Intenta escribir en C++ la siguiente clase Eiffel,

class CELOSO

feature {NONE}

esposa: MUJER;

feature {MECANICO}

coche: AUTOMOVIL



end

Clases y Objetos

15

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

ultimoCodigo=1;

public float Saldo{

get{
}

return saldo;


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

}

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

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 (saldo >=suma);

return ultimoCodigo++;

}

Clases y Objetos

16

•8

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

•9

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

•10

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
– Clases amigas
C++
– 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 e
  • Links de descarga
http://lwp-l.com/pdf5010

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
Es necesario revisar y aceptar las políticas de privacidad