INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

Slides:



Advertisements
Presentaciones similares
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
Advertisements

El proceso de desarrollo de software
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Programación Orientada a Objetos
Fundamentos de la programación orientada a objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Programación orientada a objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Sonia Rueda Herencia y Polimorfismo
Tema 3. Lenguaje unificado de modelado UML
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2016 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2015 Departamento de Ciencias e Ingeniería
Universidad Nacional de Colombia - Leguajes de Programación
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2017

PROGRAMACIÓN ORIENTADA A OBJETOS La programación orientada a objetos es un paradigma de programación. Un paradigma de programación brinda un principio y una metodología que guían todo el proceso de desarrollo de software. La POO tiene como principales objetivos favorecer la calidad y productividad del software. La productividad involucra la reusabilidad y extensibilidad. Introducción a la Programación Orientada a Objetos IPOO - 2017

PROGRAMACIÓN ORIENTADA A OBJETOS Adoptar el enfoque propuesto por la programación orientada a objetos implica: en la etapa de diseño reducir la complejidad en base a la descomposición del problema en piezas más simples, a partir de la identificación de objetos y su organización en una estructura de clases. en la etapa de implementación utilizar un lenguaje que permita retener la estructura de clases identificada en la etapa de diseño y encapsular la representación interna de modo que sea inaccesible desde el exterior. Introducción a la Programación Orientada a Objetos IPOO - 2017

ENCAPSULAMIENTO El encapsulamiento permite usar una clase considerando qué funcionalidad brinda, sin tener en cuenta cómo la implementa. Cada clase es un módulo de código que puede ser diseñado, implementado y verificado con cierta independencia del resto de la aplicación. La verificación de un módulo permite decidir si brinda los servicios que corresponden a su comportamiento y cumple con sus responsabilidades. La verificación del sistema requiere verificar también la integración del conjunto de clases. Introducción a la Programación Orientada a Objetos IPOO - 2017

HERENCIA La herencia permite aumentar el nivel de abstracción mediante un proceso de clasificación en niveles. El proceso consiste en abstraer lo que es común y esencial en un conjunto de entidades, para formar un concepto general que comprenda a todas. Una clase derivada puede pensarse como una especialización de una clase más general. Alternativamente podemos pensar a una clase base como una generalización de sus clases derivadas. Introducción a la Programación Orientada a Objetos IPOO - 2017

HERENCIA La herencia favorece la reusabilidad y la extensibilidad. La reusabilidad es un factor relevante para la productividad e implica desarrollar software ensamblando componentes prefabricadas y creando solo aquellas que son específicas. La clasificación en niveles favorece la reusabilidad de las clases generales. La extensibilidad se refiere a reducir el impacto de los cambios. La herencia permite que con frecuencia los cambios se resuelvan agregando especializando la jerarquía de clases. Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD Una clase genérica encapsula a una estructura cuyo comportamiento es independiente del tipo de las componentes. La genericidad aumenta las oportunidades de reuso, porque evita escribir el mismo código repetidamente. Las clases genéricas pueden especializarse en otras que exhiben un comportamiento más ligado a la aplicación y son menos reusables. Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD class Fila { //Atributos de instancia private Elemento [] f; public boolean esCreciente (){ //Requiere cantElementos() >= 2 int i = 0; boolean es = true; while (i< cantElementos()-1 && es){ es = f[i].menor(f[i+1]); i++; } return es; La clase Fila encapsula a un arreglo f cuyas componentes son de tipo Elemento.

GENERICIDAD El método esCreciente() retorna verdadero sí y solo sí los elementos almacenados en una fila f están ordenados de forma creciente. Se asume que f tiene al menos dos elementos. El código del método esCreciente es independiente del tipo de las componentes del arreglo f, en tanto esté definida la relación menor. Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD Fila f: arreglo de Elemento cant: entero <<Constructores>> Fila(n: entero) <<Comandos>> insertar(e: Elemento) <<Consultas>> cantElementos(): entero esCreciente(): boolean filaLlena(): boolean contarElementos(e: Elemento): entero insertar (e :Elemento) Requiere e ligada y cant menor a la cantidad de componentes del arreglo. contar (e :Elemento) Cuenta la cantidad de elementos equivalentes a e.

GENERICIDAD class Fila { //Atributos de instancia private Elemento [] f; private int cantElementos; public Fila(int n){ f = new Elemento[n]; } public void insertar(Elemento e){ f[cantElementos++] = e; public int cantElementos(){ return cantElementos; … Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD public int contarElementos(Elemento e){ return cant = fila.length; } public int contarElementos(Elemento e){ int i = 0; int cont = 0; while (i < cantElementos()){ if (f[i].equals(e)) cont++; i++; } return cont;

GENERICIDAD abstract class Elemento { abstract boolean equals(Elemento e); abstract boolean menor(Elemento e); } Introducción a la Programación Orientada a Objetos IPOO - 2017

¿Por qué es necesario el casting? GENERICIDAD class Robot extends Elemento{ … public boolean equals(Elemento e){ Robot r =(Robot) e; return nombre.equals(r.obtenerNombre()); } public boolean menor(Elemento e){ return energia < (r.obtenerEnergia()); ¿Por qué es necesario el casting? Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD En la aplicación se considera que: Un robot es igual a otro si tiene el mismo nombre. El método equals compara los atributos nombre. Un robot es menor que otro si tiene menos energía. El método menor compara los atributo energía. Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD class testFabrica { … Fila f = new Fila(100); Robot rob1 = new Robot(“Bob”); Robot rob2 = new Robot(“Tom”); f.insertar(rob1); f.insertar(rob2); if (f.esCreciente()) Aunque una fila puede contener componentes de tipo Elemento, en una aplicación particular todas las componentes son del mismo tipo, en este ejemplo Robot.

La estructura en este caso es GENERICIDAD class testFabrica { … Fila f = new Fila(100); Robot rob1 = new Robot(“Bob”); Robot rob2 = new Robot(“Tom”); if(!f.filaLlena() && rob1!=null) f.insertar(rob1); if(!f.filaLlena() && rob2!=null) f.insertar(rob2); if (f.esCreciente()) Si la clase Robot es especializada por otra clase RobotAlfa, las componentes de una fila pueden ser instancias de Robot o de RobotAlfa. La estructura en este caso es genérica y polimórfica.

GENERICIDAD class Racional extends Elemento{ //num y den no tienen factores primos public boolean equals (elemento e){ Racional r =(Racional) e; return r.num() == num && r.den() == den; } public boolean menor(elemento e){ return num/den < r.num()/r.den(); Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD class testRacionales{ … Fila f = new Fila(100); Racional r1 = new Racional(1,2); Racional r2 = new Racional(1,3) ; if(!f.filaLlena() && r1!=null) f.insertar(r1); if(!f.filaLlena() && r2!=null) f.insertar(r2); if (f.esCreciente()) Aunque un objeto de clase Fila pueden contener componentes de tipo Elemento, en una aplicación particular todas las componentes son instancias del mismo tipo, en este ejemplo Racional

GENERICIDAD Un objeto de clase Fila puede contener elementos de clase Robot o de clase Racional, pero no debería contener algunos de clase Racional y otros de clase Robot. Si el programador de clase cliente de Fila, por error usara insertar algunas veces con parámetros de clase Racional y otras con parámetros de clase Robot, el método esCreciente no funcionará correctamente. No está definido un método menor que compare un Robot con un objeto de clase Racional y probablemente no tenga sentido hacerlo. Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD class testFila { … Fila f = new Fila (2); Racional r1= new Racional (1,2); Racional r2 = new Racional (1,3); Racional r3= new Racional (1,2); f.insertar(r1); f.insertar(r2); f.insertar(r3); Error de ejecución, en este caso la clase cliente no cumple el contrato. Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD class testFila { … Fila f = new Fila (3); Racional r1= new Racional (1,2); Racional r2 = null; Racional r3= new Racional (1,2); f.insertar(r1); f.insertar(r2); f.insertar(r3); if (f.esCreciente()) Error de ejecución, en este caso la clase cliente no cumple el contrato. Introducción a la Programación Orientada a Objetos IPOO - 2017

GENERICIDAD class testFila { … Fila f = new Fila (10); Racional r1= new Racional (1,2); Racional r2 = new Racional (1,3); Robot r3= new Robot(“Tom”); f.insertar(r1); f.insertar(r2); f.insertar(r3); Error de la aplicación, el mayor riesgo es que pasen desapercibidos durante el testing. Introducción a la Programación Orientada a Objetos IPOO - 2017