cap3.1
TRANSCRIPT
LOGO
Ing. Mary Lopez
Programacion II
PROGRAMACIONORIENTADA A OBJETOS
Universidad Autónoma Gabriel Rene MorenoFICCT
Semestre II/2015
ContenidoIntroducción1
Conceptos Básicos2
Diagrama de Clases
4 Taller 1: Metodología Identificar Objetos y Clases
3
Taller 2: Definición de la Clase en C++5
6 Taller 3: Clase Vs Herencia
Objetivos
1. Conocer y Entender los conceptos fundamentales de la Programación orientada a objetos.
2. Aplicar los conceptos de POO para el diseño y programación.
3. Analizar los diferentes niveles de reutilización que permite la POO.
Palabras Clave
• Objetos y Clases
• Atributos
• Mensajes y Métodos
• Encapsulamiento y ocultamiento
• Interfaces
• Herencia de clases
• Polimorfismo
• Composición de Objetos
1. INTRODUCCIÓN
Preliminar
Beneficios
Que es Poo ?
- Frecuentemente sigue el método de resolución de problemas de la vida real.
PreliminarP.O.O
- El análisis y diseño OO modela el mundo en función a objetos con: algún estado, comportamiento y determinados eventos.
Algunos Ejemplos:
Beneficios de la POO
Reutilización(herencia)
Integridad(Encapsula)
Programas mas sencillos
Por que usar ?
Pensar enObjetos
Por que tardo en llegar ?
Simula y Smalltalk eran lenguajes conocidos sólo en las Universidades.
La gente consideró que era un sistema de ventanas y no apreció el paradigma
A partir de los 80 aparece C++ (C orientado a objetos) . Con esto el paradigma gana popularidad ya que no significaba aprender nuevos lenguajes de programación
- Organización de los programas tratando de representar el mundo real.
- Un programa se compone de un conjunto de objetos que interactúan por mensajes.
- Cada objeto es una abstracción del mundo real y realiza una única tarea.
¿Que es POO?
- Interesa que se puede hacer con los objetos mas que como se hace.
- Cada objeto es un ejemplar de una clase.
- Las clases se pueden organizar en una jerarquía de herencia.
2. CONCEPTOS BASICOSDefinición
(Booch)
Pilares de la Poo
Abstracción(Que es mas importante que el Como)
Encapsulamiento(Atributos + Métodos)Ocultamiento
( 3 Niveles)Modularidad
Herencia(Derivación)
Polimorfismo(2 tipos)
La POO es el método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa un ejemplar de una clase y cuyas clases son miembros de una jerarquía de clases unidas mediante relaciones de herencia
.
2.1 Definición de Booch
• La unidad lógica de programación es el objeto.• Los objetos con características idénticas serán una Clase.• Las clases pertenecen a una jerarquía (son las clases las
que heredan y no los objetos).• Los objetos tienen relaciones.
2.2 Pilares de la Poo
2.2.1 Abstracción Es el conocimiento que se tiene de una cosa prescindiendo de
las demás que estén con ella. La abstracción localiza y oculta los detalles de un modelo o
diseño para generar y manipular objetos Se puede conocer un objeto observando sin necesidad de ver su
interior, su implementación o su forma de construcción. Existen dos tipos de abstracción: de datos y funcional.
La abstracción se enfoca a la vista exterior de un objeto «Este objeto es ….»
Abstracción de datosEs utilizar los datos sin preocuparse por los detalles de su implementación, lo importante es saber que tipo de información se puede utilizar y no como está almacenado
Abstracción FuncionalEs saber que es lo que hace un determinado proceso, pero no como lo hace. Por ejemplo el proceso Buscar de la clase Lista, se sabe que buscara un elemento sin importar como lo hará.
Que AtributoComo Campo
Que métodoComo algoritmo
Identificar los objetos principales Definir atributos y métodos principales de cada objeto Clasificar los objetos según sus semejanzas y diferencias Establecer como se relacionan y como se comunican entre si
(eventos)
2.2.2 Encapsulamiento
Es el resultado de ocultar los detalles de implementación (estado interno) de un objeto respecto de su usuario
El empaque conjunto de datos y métodos se llama encapsulación
El objeto esconde (protege) sus datos de los demás objetos y permite el acceso a los datos mediante sus propios métodos. Esto es lo que se llaman ocultamiento de la información y evita la corrupción de los datos de un objeto.
Este pilar de POO definitivamente facilita el cambio y mejora la modularidad
El encapsulamiento permite a otros objetos ver su interior «Este objeto tiene …»
Ocultamiento
Consiste en no permitir el acceso a los componentes de una clases :atributos y métodos
Esto se logra con la visibilidad que ofrecen los lenguajes de programación. Privado: Solo los miembros de la clase tienen
acceso
Protegido: Solo los miembros de la clase y sus
derivados tienen acceso
Público: Todos tienen acceso
2.2.3 Modularidad
Este concepto ya viene desde la programación estructurada, y se refiere al hecho de realizar un programa por partes, a las cuales se las denomina módulos.
Un módulo es un archivo que contiene un conjunto de declaraciones y/o procesos.
Una Clase será un modulo independiente.
2.2.4 HerenciaEs una propiedad que permite que los objetos sean creados a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes.
El gato y el Perro tendrían la herencia (métodos y atributos) del Mamífero.
Mamífero
Gato Perro
Es la capacidad de crear nuevas clases basándose en clases previamente definidas, de las que se aprovechan ciertos datos y métodos, se desechan otros y se añaden nuevos.
Lista
Pila
Cola
Simple
Empleado
Amiga
Madre
Mujer
Multiple
2.2.5 Polimorfismo Es la capacidad que tienen los objetos de una clase
de responder al mismo mensaje o evento en función
de los parámetros utilizados durante su invocación. Hay dos tipos:
• Dinámico: es el que el código no incluye ningún tipo
de especificación sobre el tipo de datos. TEMPLATE
• Estático: es el que los tipos a los que se aplica el
polimorfismo deben ser explícitamente indicados y
declarados uno por uno antes de ser utilizados.
proceso VS función.
Polimorfismo x Dos Polimorfismo por sobrecarga de funciones: Un mismo nombre de
función para distintas funciones.a = Sumar(c,d);a = Sumar(c,d,5);
ifndef FechaH#define FechaHclass Fecha { private: unsigned short d; unsigned short m; unsigned int a; public: Fecha(); bool operator<(Fecha &b); bool operator>(Fecha f2); bool operator==(Fecha f2); Fecha& operator=(Fecha &b);};#endif
bool Fecha::operator<(Fecha &b){bool esMen; esMen=false; if (this->a<b.a) {
esMen=true; }else if (this-> a==b.a){
if (this->m<b.m){ esMen=true;
} else if(this->m==b.m){ if (this->d<b.d) { esMen=true; }
} } return esMen;};
Polimorfismo por sobrecarga de operadores: Un operador capaz de realizar operaciones directo sobre nuevos objetos.
3. DIAGRAMA DE CLASESDiagrama de Clases
Partes del DC
Clase
Objeto
Atri butos
Método
Tipos
Igualdad de Identidad y estado
Herencia
General ización
Especiali zación
Relación entre clases
Asociación
Asociación Genérica
La Clase asociación
Asociación Reflexiva
Agregación
Composición
• Es en realidad un complemento de UML (Lenguaje Unificado de Modelado: estándar para describir un "plano" del sistema)
• Representa un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema.
• Representa las clases, sus partes y la forma en la que las clases de los objetos están relacionados uno con otro.
• Es la fuente de generación de código.
Los Diagramas de Clase
Partes de un DC
Clases: Una clase es una definición de un tipo de objeto. Es una descripción generalizada de un conjunto de objetos similares• Atributos: describe las características de una clase de
objetos.• Métodos: define el comportamiento de una clase de objetos
Asociación: Es un término formal para un tipo de relación.
Herencia: Permite organizar las definiciones de la clase para simplificar y facilitar su implementación.
3.1 Clase Es la descripción de un conjunto de objetos que
comparten una estructura ( atributos, operaciones, relaciones y semántica) y un comportamiento.
La estructura de un objeto se define en su clase, por lo que un objeto es en realidad la instancia de una clase
Luis Joyanes Aguilar“Una Clase es un tipo definido por el usuario(programador) que determina las estructuras de datos y las operaciones asociadas con este tipo”
3.1.1 Objeto
Entidad que contiene los atributos que describen el estado de un objeto del mundo real y las acciones que se asocian con el objeto del mundo real.
Un objeto es designado con un nombre o un identificador.OBJETO = DATOS + OPERACIONES
Los datos deberían estar ocultos en el objeto, y las operaciones serían el interface del objeto con el exterior, pero estas operaciones están encapsuladas en "cajas negras".
Taylor Jourdon Booch
La Clase : Fechaclass Fecha { private: unsigned short d; // 31 dias unsigned short m; // 12 meses unsigned int a; // > 2... public:
Fecha(); //Contructor Fecha(const Fecha &); //Contructor Fecha(unsigned short,unsigned int); //Contructor void PutDia(unsigned short); //Modificador void PutMes(unsigned short); //Modificador void PutGestion(unsigned int); //Modificador unsigned short GetDia(); //Selector unsigned short GetMes(); //Selector unsigned int GetGestion(); //Selector
__property unsigned short dia={write=PutDia,read=GetDia}; //Propiedades __property unsigned short mes={write=PutMes,read=GetMes}; //Propiedades __property unsigned int gestion={write=PutGestion,read=GetGestion}; //Propiedades // POLIMORFISMO virtual char *GetFecha(); virtual void PutFecha(unsigned short,unsigned int); friend unsigned int GetAnios(Fecha &,Fecha &); //sobrecarga de operadores bool operator<(Fecha &f); //Para comparar < con tipo Fecha bool operator>(Fecha &f); //Para comparar > con tipo Fecha bool operator==(Fecha &f); //Para comparar igualdad con tipo Fecha Fecha &operator=(Fecha &f);//Asignar con = variables tipo Fecha ~Fecha(); //Propiedades};
La Clase : FechaFecha::Fecha(){//Contructoresd=1;m=1;a=0;};
Fecha::~Fecha(){}; //Destructores
unsigned short Fecha::GetDia(){return d; }; //Selectores
//otros métodos virtuales para polimorfismochar *Fecha::GetFecha(){ char *fec1=new char[10], *fec2=new char[10]; itoa(d,fec1,10); itoa(m,fec2,10); strcat(fec1,"/"); strcat(fec1,fec2); strcat(fec1,"/"); itoa(a,fec2,10); strcat(fec1,fec2); return fec1;};
Objeto de un tipo o Clase
Declarar el objeto como un tipo:NombreClase objeto (parámetros);
Acceso a un atributo de la clase: objeto.variable = valor;Acceso a un método o función de una clase: objeto.nombreMetodo(parámetros);
Por Ejemplo:
Declarar el objeto como un tipo:Fecha fec1(2,0,2015);
Acceso a un atributo de la clase: fec1.dia = 2;Acceso a un método o función de una clase: fec1.PutMes(3);
Declarar un objeto dinámicoobjeto = new NombreClase(parametros);
NombreClase1 *objeto1=new NombreClase2(parametros);Acceso a un atributo de una clase objeto->variable = valor;Acceso a un método o función de una clase objeto->nombreMetodo(parámetros);
Por Ejemplo:
Creación de un objeto dinámico
Declarar el objeto como un tipo:Fecha *fec2=new Fecha(2,0,2015);
Acceso a un atributo de la clase: fec2->dia = 2;Acceso a un método o función de una clase: fec2->PutMes(3);
3.1.2 Elementos de un Objeto
1. Atributos Son las características que definen a la clase, es lo que el usuario
(de la clase) puede ver. Es la abstracción. Son variables que están dentro de los objetos. También son
llamados: propiedades o datos miembro.Ejemplo: La Fecha definido por 3 datos dia, mes y año
2. MétodoEs la forma en que actúa y reacciona ante sus cambios de estado e intercambio de mensajes con otros objetos.
Los objetos definidos tienen partes públicas, privadas y protegidas.
La parte pública o visible por los demás objetos representa la interfaz.
Método
• El mensaje es el modo en que se comunican e interrelacionan los objetos entre si.
• Son los procesos (funciones o procedimientos) que permiten trabajar con los datos de los objetos.
• La visibilidad de una función viene dada por:
Public (+) permite el acceso desde otras clases. Private (-) limita el acceso a la clase, solo operaciones de la
clase tienen acceso. Protected (#) permite el acceso por las subclases. En el caso
de generalización (herencia), las subclases deben tener acceso a los atributos y operaciones de la superclase, por ello se los define con protected..
Tipos de Métodos
• Constructores• Destructores• Modificadores• Selectores • Iteradores• Otros
CFecha PonDiaPonMesPonAnioObtDiaObtMesObtAnio
CMatriz
PonDimensionPonElementoObtDimensionObtElemento
El Constructor Es un proceso que se encarga de:
• Reservar espacio de memoria para los datos del objeto.
• Inicializar los atributos del objeto Darle un estado inicial.
Tipos de Constructor:Constructor de Oficio = Constructor por defecto Inicializa los atributos con valores definidos por el
implementador de la clase. Es el constructor por defecto (no tiene argumentos).
Fecha::Fecha(){d=1; m=1; a=2001; }
Constructor de Copia Inicializa los atributos del objeto con los datos
provenientes de otro objeto de la misma clase.
Fecha::Fecha(const Fecha &F2){ d=F2.d; m=F2.m; a=F2.a; }
Constructor con Parámetros Inicializa el objeto con datos provenientes de los
parámetros.
Fecha::Fecha(short dd, short mm,int aa) { SetFecha(dd, mm, aa); }
El Constructor
Destructor
Liberar la memoria reservada para los datos del objeto. C++ Solo permite 1 destructor y sin parámetros. La mayoría de los lenguajes lo tiene implementado por
default. Solo se lo implementa cuando el objeto reserva memoria
en tiempo de ejecución o cuando los atributos del objeto son punteros.
En C++ el destructor se nombra con el mismo nombre de la clase precedido de un símbolo de ~.
Fecha::~Fecha(){ //Libera aquí}
int *vec=new int[dim]; ………………… delete [] vec;
int **mat=new int *[nfil];for(int i=0;i<nfil;i++){ mat[i]=new int [ncol];}…………………….for(int i=0;i<nfil;i++){ delete [] mat[i];}delete []mat;
Modificador
Permite cambiar el estado de un objeto, modificando los atributos del mismo.
Los nombres de estos métodos usualmente utilizan los prefijos Set o Pon
Void Fecha::SetDia(short dd){ d=dd;}
Selector
Permite devolver el valor de los atributos sin alterar su estado.
short Fecha::GetMes() { return m;}
3.1.3 Igualdad de Identidad y estado
Es la propiedad de un objeto que lo distingue de todos los demás objetos. Es su nombre !!!
No hay que confundir el nombre de un objeto con el objeto mismo.
piolin != &piolin;
Puede haber varias variables que se refieran al mismo objeto, pero no varios objetos con la misma identidad.
Canario *pointer = &piolin;
Puede haber objetos con el mismo estado pero identidades diferentes.
Canario cantarin = piolin;
3.2 HerenciaESPECIALIZACION
GENERALIZACION
IDENTIFICANDO RELACIONES DE HERENCIA
Generalización Vs Especialización
• Cuando dos clases tienen atributos en común se debe analizar la relación que guardan entre si: Las clases con atributos en común pueden conformar una
superclase Una superclase es entonces la generalización de varias subclases.
De una clase puede derivarse otra llamada Subclase.
Derivación Simple
//Clase base class Persona { public: Persona(char *n, int e); char *LeerNombre(char *n) ; int LeerEdad() ; void CambiarNombre( char *n); void CambiarEdad(int e); protected: char nombre[40]; int edad;};
// Clase derivada class Empleado : public Persona { public: Empleado(char *n, int e, float s); float LeerSalario(); void CambiarSalario( float s); protected: float salarioAnual;
};
• public: Los miembros heredados de la clase base conservan el tipo de acceso con que fueron declarados en ella.
• private: Todos los miembros heredados de la clase base pasan a ser miembros privados en la clase derivada.
3.4.2 Derivacion Multiple
#include <iostream>using namespace std;
class ClaseA { private: int valorA; public: ClaseA(){} int LeerValor() const { return valorA; } protected: int valor;};
class ClaseB : Public ClaseA { public: int valorB; ClaseB() {} int LeerValor() const { return valorB; } protected: int valorx;};
Si necesita aplicar
herencia habrá
Ambigüedad en LeerValor
3.3 Relación entre Clases
Es una relación entre instancias(objetos) de clases, especificando que los objetos de una clase deben “conocer'' de alguna manera los objetos de la otra. Por ejemplo:
Un objeto de la clase X envía un mensaje a un objeto de la clase Y.
Un objeto de la clase Y crea un objeto de la clase X. Un objeto de la clase X recibe un mensaje con un objeto
de la clase Z como argumento
Asociación: Es una relación semántica (significativa) entre objetos. Cuando un objeto accede a los atributos y métodos de otro objeto estamos definiendo una asociación entre ellos.
Agregación: Es una relación que define que un objeto es parte de otro objeto. Cuando definimos que un objeto tiene como atributo otro objeto decimos que es una agregación. A través de la agregación se definen objetos compuestos.
Tipos de relación
3.3.1 Asociaciones genéricas
3.3.2 Navegabilidad
Hay que ver si desde una clase se puede ir a la otra. La clase Fecha no tiene información de la clase Socio por lo que
la navegabilidad desde la clase Fecha no es posible. Sin embargo, la clase Socio tiene una referencia a la clase Fecha
por lo que si es viable la navegabilidad en este sentido. La navegabilidad se expresa con una punta de flecha abierta
puesta en el lado de la clase a la que se llega.
3.3.3 La Clase Asociación
Cuando se modela una asociación entre clases, a veces es necesario incluir otra clase que contiene información valiosa acerca de la relación.
La siguiente figura muestra una clase asociación para el ejemplo de los vuelos.
La asociación entre la clase Flight y FrequentFlyer es a través de una clase llamada MileageCredit. Obsérvese que esto se da en asociaciones Muchos a Muchos en las que es necesario almacenar cierta información derivado de la asociación.
3.3.4 Asociación Reflexiva
Una clase puede asociarse con sí misma. Una clase Empleado puede relacionarse con sí misma a través del rol gerente/dirige.
No significa que una instancia está relacionada consigo misma, sino que una instancia de la clase está relacionada con otra instancia de la misma clase.
Una instancia de Employee puede ser el gerente de otras instancias de Employee. Como el rol manages tiene una multiplicidad de 0…*, significa que puede no tener otros empleados a quien dirigir.Una instancia de Employee tiene 1 sólo gerente ó un solo director.
3.3.5 Agregación Básica Es un tipo especial de asociación utilizado para modelar una
relación “whole to its parts”. Por ejemplo, Coche es una entidad “whole” y Llanta es una
parte del Coche. Una asociación con una agregación indica que una clase es
parte de otra clase. En este tipo de asociación, la clase hijo puede sobrevivir sin
su clase padre. Para representar una relación de agregación, se dibuja una línea sólida de la clase padre (total) a la clase hijo (parte), y con un diamante en el lado de la clase padre.Una llanta puede existir sin automóvil
3.3.6 Composición
En este caso el ciclo de vida de una instancia de la clase hijo depende del ciclo de vida de una instancia de la clase padre.
A diferencia de la agregación básica, para representarla el diamante es lleno.
Por ejemplo: Una instancia de la clase Company debe tener al menos una
en la clase Departamento. En este tipo de relaciones, si una la instancia Company se
elimina, automáticamente la instancia Departamento también se elimina.
Otra característica importante es que la clase hijo solo puede relacionarse con una instancia de la clase padre.
1. Agregación Es una relación en la que la clase “Todo” juega un rol mas importante que la Clase “Parte”
2. Composición Permite expresar una relación de tipo “está compuesto por”. Por ejemplo, un segmento está compuesto por dos puntos: origen y extremo (el Objeto base se construye a partir del objeto incluido).
Fecha
Persona ?¿
ConstructorDestructor
ModificadoresSelectores
otros
1
2
3
4
4.14.2
TALLER 1
METODOLOGÍA PARA IDENTIFICAR OBJETOS – CLASES - HERENCIA
TALLER 2EL DIAGRAMA DE CLASES
TALLER 3IMPLEMENTACION C++
LOGO
No es un bug, es una característica no documentada.
(anónimo)