cap3.1

60
LOGO Ing. Mary Lopez Programacion II PROGRAMACION ORIENTADA A OBJETOS Universidad Autónoma Gabriel Rene Moreno FICCT Semestre II/2015

Upload: mary-dunnia-lopez-n

Post on 11-Jan-2017

650 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Cap3.1

LOGO

Ing. Mary Lopez

Programacion II

PROGRAMACIONORIENTADA A OBJETOS

Universidad Autónoma Gabriel Rene MorenoFICCT

Semestre II/2015

Page 2: Cap3.1

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

Page 3: Cap3.1

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.

Page 4: Cap3.1

Palabras Clave

• Objetos y Clases

• Atributos

• Mensajes y Métodos

• Encapsulamiento y ocultamiento

• Interfaces

• Herencia de clases

• Polimorfismo

• Composición de Objetos

Page 5: Cap3.1

1. INTRODUCCIÓN

Preliminar

Beneficios

Que es Poo ?

Page 6: Cap3.1

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

Page 7: Cap3.1

Algunos Ejemplos:

Page 8: Cap3.1

Beneficios de la POO

Reutilización(herencia)

Integridad(Encapsula)

Programas mas sencillos

Por que usar ?

Pensar enObjetos

Page 9: Cap3.1

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

Page 10: Cap3.1

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

Page 11: Cap3.1

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)

Page 12: Cap3.1

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

Page 13: Cap3.1

• 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

Page 14: Cap3.1

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 ….»

Page 15: Cap3.1

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)

Page 16: Cap3.1

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

Page 17: Cap3.1

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

Page 18: Cap3.1

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.

Page 19: Cap3.1

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.

Page 20: Cap3.1

Lista

Pila

Cola

Simple

Empleado

Amiga

Madre

Mujer

Multiple

Page 21: Cap3.1

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.

Page 22: Cap3.1

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.

Page 23: Cap3.1
Page 24: Cap3.1

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

Page 25: Cap3.1

• 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

Page 26: Cap3.1

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.

Page 27: Cap3.1

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”

Page 28: Cap3.1

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

Page 29: Cap3.1

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

Page 30: Cap3.1

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

Page 31: Cap3.1

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

Page 32: Cap3.1

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

Page 33: Cap3.1

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.

Page 34: Cap3.1

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

Page 35: Cap3.1

Tipos de Métodos

• Constructores• Destructores• Modificadores• Selectores • Iteradores• Otros

CFecha PonDiaPonMesPonAnioObtDiaObtMesObtAnio

CMatriz

PonDimensionPonElementoObtDimensionObtElemento

Page 36: Cap3.1

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

Page 37: Cap3.1

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

Page 38: Cap3.1

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;

Page 39: Cap3.1

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

Page 40: Cap3.1

Selector

Permite devolver el valor de los atributos sin alterar su estado.

short Fecha::GetMes() { return m;}

Page 41: Cap3.1

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;

Page 42: Cap3.1

3.2 HerenciaESPECIALIZACION

GENERALIZACION

IDENTIFICANDO RELACIONES DE HERENCIA

Page 43: Cap3.1

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.

Page 44: Cap3.1

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.

Page 45: Cap3.1

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

Page 46: Cap3.1

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

Page 47: Cap3.1

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

Page 48: Cap3.1

3.3.1 Asociaciones genéricas

Page 49: Cap3.1
Page 50: Cap3.1

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.

Page 51: Cap3.1

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.

Page 52: Cap3.1

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.

Page 53: Cap3.1

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

Page 54: Cap3.1

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.

Page 55: Cap3.1

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

Page 56: Cap3.1

ConstructorDestructor

ModificadoresSelectores

otros

1

2

3

4

4.14.2

Page 57: Cap3.1

TALLER 1

METODOLOGÍA PARA IDENTIFICAR OBJETOS – CLASES - HERENCIA

Page 58: Cap3.1

TALLER 2EL DIAGRAMA DE CLASES

Page 59: Cap3.1

TALLER 3IMPLEMENTACION C++

Page 60: Cap3.1

LOGO

No es un bug, es una característica no documentada.

(anónimo)