tres elementos esenciales de la programación … · extender y reusar el código – los objetos...

29
1 Objetos Tres elementos esenciales de la programación orientada a objetos Abstracción Herencia Polimorfismo Objetos Modelado en objetos importancia del diagrama de clases: es el diagrama esencial para UML es el depositorio central de la información acerca del sistema refleja el mundo real y la visión que se tiene acerca de él es menos dependiente de detalles que el MDF y que los diagramas dinámicos – posee estabilidad con la evolución organiza el mundo real en elementos manejables casos de uso en el modelado en objetos Dr. Deni Torres Román: Dr. Deni Torres Román:

Upload: nguyennhan

Post on 03-Oct-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

1

Objetos

Tres elementos esenciales de la programación orientada a objetos

AbstracciónHerenciaPolimorfismo

Objetos

Modelado en objetos

importancia del diagrama de clases:– es el diagrama esencial para UML– es el depositorio central de la información acerca

del sistema– refleja el mundo real y la visión que se tiene acerca

de él– es menos dependiente de detalles que el MDF y que

los diagramas dinámicos– posee estabilidad con la evolución– organiza el mundo real en elementos manejables

casos de uso en el modelado en objetos

Dr. Deni Torres Román:Dr. Deni Torres Román:

Page 2: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

2

Tareas para el modelado en objetosrecopilación de información: casos de usodefinir diagrama de contexto: actores-sistemaidentificar candidatos a objetos: sustantivos en los casos de usoseleccionar clases:eliminar redundancia, vaguedad,irrelevancia; atributos, operaciones, roles; eventos; lo no perteneciente al mundo realcrear diagrama de clasesidentificar relaciones: agregación, dependencia, herencia, asociación reflexivadeterminar atributos y operacionesrefinar el modelo para herencia: jerarquíaprobar el modelo: casos de uso, diccionario del modelo

Objetos

Empaquetamientosistemas grandes necesitan ser particionados para lograr visibilidad y manejar la complejidadagrupamiento de objetos ayuda a crear diferentes niveles de abstracciónun sistema es una colección de paquetesun paquete es un agrupamiento lógico de elementos del modelo ( clases , casos de uso,procesadores,...) con alta cohesión y bajo acoplamientoun paquete puede ser descompuesto en otrosun paquete puede ser visto como un subsistema o un móduloEjemplos:

Page 3: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

3

Objetos

Operador de referencia &una referencia es un aliasnecesita, a diferencia de un puntero, ser siempreinicializadauna referencia contiene una dirección pero se comporta como un valorEjemplo– int valor = 50;– int &refValor = valor; //declaración de la referencia– int &refValor2; //ERROR en “ “ “– refValor +=5; //valor = 55– int otroValor = refValor; // otroValor = 55– int *ptr = &refValor; // incializa al puntero

// con la dirección de valor

Llamadas por valor, puntero y referencia

void Cambio (int a, int b) {int local = a;a = b;b = local;} //Cambio (x, y);

void Cambio (int *pa, int *pb) {int local = *pa;*pa = *pb;*pb = local;} //Cambio (&x, &y);

void Cambio (int &a, int &b) {int local = a;a = b;b = local;} //Cambio (x, y);

Page 4: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

4

Objetos

Operador de resolución de ámbito ::

Ejemplo#include <iostream.h>int a;void main() {

float a = 1.5;::a = 5;cout<<“local a”<< a <<endl;cout<<“global a”<< ::a <<endl;

}::variable permite el acceso a un elemento oculto en el

ámbito actual

Objetos

Estructura específica de los datos de una clase

class NombreDeLaClase {private:

int datoInt;char* chPtr;

protected:object* objectPtr;

public:struct nombreStructure;

};características de cada tipo de dato

Page 5: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

5

Objetos

Estructura específica de las funciones miembros de una clase

ret NombreDeLaClase::NombreDelMetodo{

cuerpo //código}

las funciones miembros o métodos pueden ser también private, protected y publiclas funciones miembros pueden ser: modificadoras,selectoras e iteradorasmétodos selectores– ret NombreDelMetodo const;

Dr. Deni Torres Román:Dr. Deni Torres Román:

Objetos

La biblioteca iostream

iostream vs stdiocout y cin objetos que permiten mediante el operador <<(>>) la salida o entrada de datosobjetos flujos de datosEjemplos– cout<<“imprime un entero”<<15<<endl;– cout<<“imprime un flotante”<<15.25<<endl;– cout<<“imprime un letrero”<<endl;– cout<<“imprime un hexadecimal”<<0xA5<<endl;

Diferencias entre cout y printf

Page 6: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

6

Objetos

Asignación dinámica de memoria newEn C existen las funciones malloc() y free()En C++ new asigna memoria dinámica– new tipo; // asigna un solo elemento– new tipo [ ]; // asigna un arreglo de elementos

Ejemplosint n;char* s;cin>>n;int *p = new int;s = new char [n];Point *p1= new Point(...);

Objetos

Liberación dinámica de memoria delete

En C existe la función free()En C++ delete libera memoria dinámica– delete dirección; // libera un espacio

// previamente asignado por new– delete[n] dirección; // idem para un arreglo de

// elementosEjemplosdelete p;delete [ ] s;delete p1;

Page 7: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

7

Objetos

Ventajas de new y delete

new conoce cuanta memoria se le asigna a cada variable, pero malloc( ) no,new invoca al constructor del objeto, mientras que malloc( ) no puede,delete invoca al destructor y libera memoria.siempre que use un new debe emplear en la parte correspondiente un delete para liberar memoria, p.e. constructor/destructor

Objetos

Funciones inline

el compilador genera el código cada vez que encuentra esta función, es más segura que #define#define cuadrado (x) x*x– errónea si x= a+b

sólo tiene sentido para funciones de código pequeño,aumenta la eficiencia del programa,no deben definirse donde se hace la definición de la clase, porque allí no debe haber código,Sintaxis– inline ret NombreDeFunción ( args ) { }

Page 8: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

8

Objetos

Declaraciones y definiciones en un archivo.h

definiciones de tipodefiniciones de funcionesdeclaraciones de datosincludesmacro-definicionescomentariosdeclaraciones de clases

struct point {...}extern int strlength(...)

extern int a;#include <signal.h>#define ..../*...*/ //class clase {...};

Objetos

Herencia y reusabilidad

creación de clases a partir de otras para extender y reusar el código– los objetos pueden construirse de modo

incremental a partir de otros objetos y pueden compartir código y estructuras de datos

– los algoritmos generales se pueden escribir de modo que se puedan reusar para nuevos tipos de objetos

organización jerárquicarepresentación del polimorfismo

Dr. Deni Torres Román:Dr. Deni Torres Román:

Page 9: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

9

Clases base y derivadas

clases con similares atributos y operaciones pueden organizarse jerárquicamentela clase situada arriba de otras es base osuperclase de las de abajo la clase situada abajo de otras es derivada o subclase

ANIMAL

Generalización

Definición– proceso de extracción de todos los atributos y

operaciones comunes en un conjunto de clases para crear una clase base o superclase

Ejemplo– atributos: tipo, modelo, capacidad,...– operaciones: arrancar, parar, acelerar,...

VEHICULO

Page 10: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

10

Objetos

Especialización

Definición– proceso de refinamiento de clases en subclases

o clases derivadas que heredan atributos y operaciones de la clase base o superclase

Ejemplo

Terrestre Acuático

Atributo extra: Número de ruedas

Operación extra: flotar

Objetos

Concepto de herencia simple

Clase Derivada 1

Clase Base

Clase Derivada 2

Clase BaseClase Base

Page 11: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

11

Especificadores de acceso

class B : public class A {};los miembros public y protected de A pasan de igual forma a Bclass B : private class A {};los miembros public y protected de A pasan en forma private a Bclass B : protected class A {};los miembros public y protected de A pasan en forma protected a B

Objetos

Elementos en la herencia (I)

private

protected

public

private A

protected A

public A

private B

protected B

public B

A

B

Page 12: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

12

Objetos

Elementos en la herencia (II)

B hereda las funciones de AB hereda los datos de Alas funciones propias de B no tienen acceso a los miembros private de A

Objetos

Concepto de herencia múltiple

Clase A Clase B

Clase Derivada AB

Page 13: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

13

Objetos

Relaciones multiniveles de herencia entre clases

Clase A

Clase B Clase C

Clase D Clase E

Objetos

Elementos que no se heredan

constructoresdestructoresfunciones friendfunciones staticdatos staticoperador de asignación =

Page 14: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

14

Objetos

Conversiones de herencia

un objeto de una clase derivada se convierte implícitamente en un objeto de una clase base pública,una referencia a una clase derivada se convierte implícitamente en una referencia a una clase base pública,un puntero a una clase derivada se convierte implícitamente en un puntero a una clase base pública.

Dr. Deni Torres Román:Dr. Deni Torres Román:

Objetos

Polimorfismo

Sobrecarga de funcionesSobrecarga de operadoresFunciones virtualesFunciones virtuales puras

Page 15: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

15

Objetos

Polimorfismo (I)

una operación que puede tener más de un método es denominada polimórficauna operación se dice polimórfica si se comporta de forma diferente sobre clases diferentes la lista de argumentos, el tipo de retorno asociados con una operación constituyen el formato o signatura de la operaciónlas operaciones polimórficas tienen el mismo nombre, la misma intención lógica y la misma signaturalas operaciones polimórficas tienen o pueden tener código diferente en clases diferentes

Polimorfismo (II)

objetos de clases diferentes responden a un mismo mensaje u operación de forma también diferente– objetos de las clases circulo, triángulo, rectángulo,

derivados de la clase forma, pueden responder a la función área() de forma diferente

característica esencial del polimorfismo es que se puedan invocar funciones sin preocuparnos sobre qué tipo de objeto son invocadasconstrucción de estructuras heterogéneas de objetos debido a que un puntero a una clase base puede apuntar a cual objeto de clases derivadasel polimorfismo se implementa con funciones denominadas virtuales

Page 16: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

16

Objetos

Sobrecarga de funciones: polimorfismo

¿Qué es una función sobrecargada?Ejemplos– int suma (int a, int b);– string suma (string a, string b);

Las funciones sobrecargadas tienen:– el mismo nombre,– un número diferente de argumentos,– diferentes tipos de argumentos,– ambas cosas

Las funciones sobrecargadas pueden ser normales o miembros de una clase

Objetos

Ventajas de la sobrecarga de funciones

uso del polimorfismo,menor número de nombres de funciones,sintaxis más clara,el compilador hace mucho de nuestro trabajo,enlace dinámico con funciones virtuales, llamadas en tiempo de ejecución.

Dr. Deni Torres Román:Dr. Deni Torres Román:

Page 17: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

17

Objetos

Sobrecarga de operadoresen C++ significados de +:– suma de dos enteros– suma de dos reales

si a y b son dos objetos definidos por el usuario, ¿será o no posible definir las operaciones de:– a = a + b;– a = a*b; ?

la sobrecarga permite la validez de las expresiones anteriores. Con el operador +sobrecargado podríamos formar una cadena a partir de otras, p.e.– “Guadalajara” + “es la capital” + “de Jalisco.”

tipos de operadores:– unarios– binarios

Objetos

Restricciones en los operadores sobrecargados de C++

se pueden sobrecargar sólo los operadores definidos en C++; no se pueden construir nuevos operadoresla sobrecarga tiene validez sólo con objetos de la clase donde el operador está definidono se puede cambiar la preferencia o asociatividadde los operadores en C++no se puede cambiar un operador binario para que funcione como uno unario y viceversano se puede sobrecargar un operador que funcione exclusivamente con punterosla sobrecarga de ++ y -- no diferencia, en principio, pre- o postincremento

Page 18: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

18

Sintaxis general de operatorfunción miembro o método de la clase– class unTipo {

private: atributospublic:

unTipo operator <op> (lista de argumentos);....

};implementación del método o función miembro– unTipo unTipo::operator <op> (lista de argumentos)

{cuerpo de la función

}al menos un operando debe ser un tipo definido por el usuario, p.e. unTipoun operando puede ser un tipo básico

Sobrecarga de operadores binarios (I)

X1 + x2 se interpreta como– operator + ( x1, x2 ); // o como– x1.operator + ( x2 );

un operador unario se puede definir como:– una función miembro de un argumento– una función friend con dos argumentos

class Binario {public:

Binario operator <op> (Binario& );};Binario Binario::operator <op> (Binario& b ) {

cuerpo }

<op> puede ser +, *, -, /,...

Page 19: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

19

Objetos

Sobrecarga de operadores binarios (II)Ejemplo:– class unaClase {

public:unaClase operator -(unaClase &t); // unaClase- unaClase unaClase operator -(int t); // unaClase- int

};– class unaClase {

private:int undato;

public:friend ostream& operator << ( ostream &, const unaClase & );};

ostream& operator << ( ostream &out, const unaClase &t ) {out << “Salida en pantalla “<<endl<<“ dato privado =“

<< t.undato <<endl; }

Objetos

Sobrecarga de operadores unarios

++ se interpreta como– operator ++ ( x ); // o como– x.operator ++ ( );

un operador unario se puede definir como:– una función miembro sin argumentos– una función friend con un argumento

Ejemplo– class unaClase {

public:unaClase& operator ++ ( void ); // ++unaClase

};– class unaClase {

public:friend unaClase& operator ++ ( unaClase& ); //++ unaClase

};

Page 20: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

20

Objetos

Recomendaciones para sobrecargar los operadores

es responsabilidad del programador definir correctamente el significado de las funciones sobrecargadas, pues C++ no interpreta automáticamente el significado de un operador sobrecargadoC++ no deriva automáticamente el significado de un operador complejo, p.e.+=,no se puede cambiar la sintaxis de los operadores, p.e. + binario, ++ unariosólo se pueden sobrecargar los operadores indicados por C++no se puede cambiar la precedencia o prioridad de los operadores

Objetos

Ejemplos de sobrecargas de operadores válidas y no válidas

complejo operator + (complejo a, complejo b); //VALvoid contador::operator++ (contador c) //VAL{ }

char* operator + (char* a, char* b); //NO VALvoid operator@ (menu barra1, menu barra2); //NO VALmenu operator++ (menu barra1, menu barra2); //NO VAL

Page 21: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

21

Objetos

Sobrecarga del operador de asignación =

el operador de asignación = puede sobrecargarse declarando una función miembroclass string {

string& operator = (string& str);

};

si el operador = no se define por el usuario en una clase, entonces el compilador lo crea pordefecto y realiza una asignación miembro a miembrox& x::operator = (const x& fuente){

cuerpo}

Objetos

Sobrecarga de los operadores de llamada a funciones ( ) y de subíndice [ ] y de flujo >> y <<

el operador ( ) puede emplearse para un tipo desubconjunto de la clase, p.e., un substring de la clase string– string string::operator( ) (int pos, int cont)

el operador [ ] puede emplearse para extraer elementos específicos de un objeto de la clase, p.e., un caracter de un objeto de la clase string– char& string::operator[] (int elem)

la sobrecarga de los operadores >> y << permite manipular además de los tipos de datospredefinidos, los tipos definidos por el usuario

Page 22: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

22

El apuntador this

el llamado a funciones se realiza siempre mediante un objeto– objeto.funciónDeLaClase ( ); // o mediante un puntero– punteroObjeto-> funciónDeLaClase ( );– ¿cómo se realiza esto?– funciónDeLaClase ( this, argumentos );

en todo objeto existe un puntero al objeto llamado thisthis accesa a la dirección del propio objetothis permite accesar a los miembros del propio objeto– this ->nombreDeMiembro;

*this es el objeto total real, no modificable

Uso del thisalmacenar un puntero al objeto asociado con la invocación de una función miembrodevolver una referencia al objeto asociado con la invocación de una función miembroT& T::f (int a ) {códigoreturn *this;

}

hacer copias de un objetoreferenciar explícitamente a un miembro ocultocomo resultado de otra declaración – class X {– int longitud;– public:– X (int longitud){this -> longitud = longitud;}

como argumento de una función

Page 23: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

23

Constructor de copiaDescripción– un constructor que crea un nuevo objeto a partir de uno

existente

Sintaxisclass Point {

int x, y;public:Point (int, int);Point (const Point&);...

};ImplementaciónPoint::Point (const Point& p) {

x=p.x;y =p.y; }

Constructor de copia por defecto

si no se incluye un constructor de copia el compilador crea uno automáticamenteconstructor de copia por defecto realiza las siguientes operaciones– void main() {– Point p1(1,2), p2(3,4), p3,;– Point p4(p2);

p4.x = p2.x; //FUNCIONA MUY BIENp4.y = p2.y; //SIN DEFINIRLO, ENTONCES?

si un dato fuera un puntero, p.e., entonces se copia la dirección del puntero de la derecha en el miembro de la izquierda– p4.ptr = p2.ptr;– LOS DOS APUNTAN AL MISMO LUGAR!!!

Page 24: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

24

Objetos

Llamadas a los constructores de copia

inicialización de un objeto con otro de la misma clasecuando se tiene una función con un argumento siendo un objetocuando una función retorna un objetoRegla sobre el uso del constructor de copia– las clases con estructuras dinámicas de datos

deben tener bien definido un constructor de copia, pues los constructores de copia por defecto sólo generan una copia superficial y no una copia profunda

Dr. Deni Torres Román:Dr. Deni Torres Román:

Objetos

Inicialización de objetos en C++

Los datos o miembros de un objeto se inicializancon valoresla incialización se realiza en los constructoresformas de inicializar– incialización mediante

sentencias

lista de incialización

Ejemplo:class ObjetoIni {

string s:char* dato;ObjetoIni (const string&,const char* iniCh);

};ObjetoIni::ObjetoIni (const string& iniStr, const char* iniCh){

s = iniStr;dato = iniCh;}

ObjetoIni::ObjetoIni (const string& iniStr, const char*iniCh):s(iniStr, dato (iniCh){ }

Page 25: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

25

Objetos

Uso del operador =Ejemplostring a(“Hola”);sttring b(“Nada”);a =b; // Ahora a contiene la expresión “Nada”– el compilador creó el =, pero es una copia superficial !!!

forma correcta de definirlostring& string::operator = (const string& s) {

if (this ==&s) return *this; // a==a CASO IDENTIDADdelete [ ]str; //BORRAR VIEJO CONTENIDOlong = s.long;if (s.str!=NULL){

str = new char [long+1]; //COPIAstrcpy (str, s.str);} //NUEVA

return *this;}

Enlace estático y dinámicoel enlace estático se realiza siempre que el compilador conoce con antelación el tipo de objeto– es rápida– es restrictiva

Ejemplo: switch (codigo) {– case ´A´: exit ();– case ´B´: mostrar ();

break; }

el enlace dinámico se realiza siempre que el compilador desconoce la posición a invocar hasta el tiempo de ejecución– alto grado de flexibilidad– más lento que el estático– uso de funciones virtuales mediante la palabra virtual

Page 26: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

26

Sobre las funciones virtuales (I)las funciones miembros de una clase pueden ser virtualeslas funciones globales no pueden ser virtualeslos destructores de las clases que van a ser heredadas deben declararse virtual para que sean llamados por los destructores de las clases derivadas ¿para qué?el uso de funciones virtuales puras posee gran utilidad, ¿por qué?en el interior de un constructor/destructor las funciones virtuales se llaman en tiempo de compilación una clase con una función virtual pura es una clase abstracta

Sobre las funciones virtuales (II)la palabra clave virtual permite a una función ser definida en la clase base y en las clases derivadas bajo el mismo nombreuna función sólo necesita ser declarada virtual en la clase baselas funciones virtuales admiten los mismos argumentos, pero código diferente en clases también diferentesfunción virtual vacía– virtual void FuncionVacia ( ) { }

función virtual pura– virtual void FuncionPura ( ) = 0;

una función virtual pura no puede ser llamada en la clase baseuna función virtual pura sirve para declarar aquellas funciones cuya definición se pospone para las clases derivadas

Page 27: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

27

Objetos

Sobre las funciones virtuales (III)los constructores no pueden ser virtualeslos destructores pueden y deben ser virtuales, lo cual permite que en una relación de herencia sean invocados todos los destructoresuna clase abstracta es aquella que tiene al menos una función virtual purauna clase abstracta sólo puede ser utilizada comoclase baseuna clase abstracta se diseña sólo para ser heredadalas clases abstractas son utilizadas sólo a través de punteros

Objetos

Polimorfismo en C++crear una jerarquía de objetos con operaciones definidas como funciones virtuales en la clase base– virtual float Area ( );

si la clase base es tal que no se puede realizar implementaciones de estas funciones, entonces son funciones virtuales puras– virtual float Area ( ) = 0;– virtual float Area ( ) const = 0;

hacer las implementaciones concretas en las clases derivadas; cada clase tiene una versión específica de la función virtualmanipular las instancias de las clases a través de una referencia o un puntero para provocar el enlace dinámico

Page 28: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

28

Objetos

Problema

Diseñar y elaborar un programa que represente un reloj con hrs, min y segs y unoperator ++ que incremente el tiempo en segundos. Debe existir una clase base y clases derivadas para diferentes tipos de relojes. Manejarse además funciones virtuales.

Objetos

Casos de usocaracterísticas– es una interacción entre un usuario y el

sistema– captura alguna función visible al usuario– puede ser de distintos tamaños– satisface algún objetivo del usuario– organiza el sistema mediante actores y

sus objetivos– utilidad en el análisis, diseño y pruebas

Page 29: Tres elementos esenciales de la programación … · extender y reusar el código – los objetos pueden construirse de modo incremental a partir de otros objetos y pueden compartir

29

Objetos

Casos de uso: partición del sistema

subconjuntos de los requerimientosdescripciones del comportamientogrupos de entidades comunicanteses fuente de las operaciones del sistemaconjuntos de escenarios potenciales

Objetos

Casos donde las funciones virtuales se llaman en tiempo de compilación y no en tiempo de

ejecución o corrida

cuando una función virtual es llamada mediante– objeto.FuncionVirtual ( ); //se le asocia la función actual

//de la clase baseen llamadas dentro de los constructores y destructores, porque los objetos no están completamente inicializadosEjemplo: