210 likes | 621 Views
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 .
E N D
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íaque guían todo el proceso de desarrollo de software. La POO tiene como principales objetivos favorecer la confiabilidad, reusabilidady extensibilidaddel software.
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.
Encapsulamiento El encapsulamientopermite usar una clase considerando quéfuncionalidad brinda, sin tener en cuenta cómola 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.
Herencia La herenciapermite 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.
Genericidad La extensibilidad se refiere a reducir el impacto de los cambios. Las modificaciones con frecuencia pueden resolverse definiendo nuevas clases específicas, sin necesidad de cambiar las que ya han sido verificadas. La reusabilidad evita escribir el mismo código repetidamente. Las clases más generales brindan mayores oportunidades de reuso. Las clases más específicas suelen tener un comportamiento más ligado a la aplicación y son menos reusables. La genericidadfavorece la reusabilidad y la extensibilidad.
Genericidad Una clase genérica encapsula a una estructura cuyo comportamiento es independiente del tipo de las componentes.
Genericidad public boolean esCreciente (){ int i=0; boolean es=true; while (i<f.cantElementos()-1 && es){ es = f[i].lower(f[i+1]); i++; } return es; }
Genericidad La clase Fila brinda un método esCreciente() que 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 de la fila f, en tanto esté definida la relación menor.
Genericidad Fila f : arreglo de Elemento cant:entero <<constructores>> Fila (n : entero) <<comandos>> insertar (e :Elemento,p:entero) <<Consultas>> cantElementos():entero esCreciente():boolean contarElementos(e:Elemento): entero
Genericidad class Fila { 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; }
Genericidad public int contarElementos (Elemento e){ int i=0; int cont =0; while (i<cantElementos()){ if (f[i].equals(e)) cont++; i++; } return cont; }
abstract class Elemento { abstract boolean equals(Elemento e); abstract boolean lower (Elemento e); }
class Robot extends Elemento{ … public boolean equals (Elemento e){ Robot r =(Robot) e; return nombre.equals(r.obtenerNombre()); } public boolean lower (Elemento e){ Robot r =(Robot) e; return energia < (r.obtenerEnergia()); } } ¿Por qué es necesario el casting?
En la aplicación se considera que: • Un robot es igual a otro si tiene su mismo nombre El método equals compara los atributos nombre • Un robot es menor que otro si tiene menos energía El método lower compara los atributo energía.
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 pueden contener componentes de tipo Elemento, en una aplicación particular todas las componentes son del mismo tipo, en este ejemplo Robot Introducción a la Programación Orientada a Objetos
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 lower (elemento e){ Racional r =(Racional) e; return num/den < r.num()/r.den(); } } Introducción a la Programación Orientada a Objetos
Genericidad class testRacionales { … Fila f = new Fila (100); Racional r1= new Racional (1,2); Racional r2 = new Racional (1,3) ; f.insertar(r1); f.insertar(r2); … if (f.esCreciente()) En esta aplicación particular todas las componentes son del tipo Racional