La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.

Presentaciones similares


Presentación del tema: "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad."— Transcripción de la presentación:

1 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 2015

2 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 confiabilidad, reusabilidad y extensibilidad del software. Introducción a la Programación Orientada a Objetos IPOO - 2015 2

3 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 - 2015 3

4 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 - 2015 4

5 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 - 2015 5

6 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 genericidad favorece la reusabilidad y la extensibilidad. Introducción a la Programación Orientada a Objetos IPOO - 2015 6

7 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD Una clase genérica encapsula a una estructura cuyo comportamiento es independiente del tipo de las componentes. Introducción a la Programación Orientada a Objetos IPOO - 2015 7

8 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD 8 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; } Introducción a la Programación Orientada a Objetos IPOO - 2015

9 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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. Introducción a la Programación Orientada a Objetos IPOO - 2015 9

10 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD Introducción a la Programación Orientada a Objetos IPOO - 2015 10 Fila f: arreglo de Elemento cant: entero > Fila(n: entero) > insertar(e: Elemento) > cantElementos(): entero esCreciente(): boolean contarElementos(e: Elemento): entero

11 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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; } Introducción a la Programación Orientada a Objetos IPOO - 2015 11

12 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD public int contarElementos(Elemento e){ int i = 0; int cont = 0; while (i < cantElementos()){ if (f[i].equals(e)) cont++; i++; } return cont; } Introducción a la Programación Orientada a Objetos IPOO - 2015 12

13 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD abstract class Elemento { abstract boolean equals(Elemento e); abstract boolean lower (Elemento e); } Introducción a la Programación Orientada a Objetos IPOO - 2015 13

14 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD 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()); } } Introducción a la Programación Orientada a Objetos IPOO - 2015 14 ¿Por qué es necesario el casting?

15 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 lower compara los atributo energía. Introducción a la Programación Orientada a Objetos IPOO - 2015 15

16 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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()) Introducción a la Programación Orientada a Objetos IPOO - 2015 16 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.

17 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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 IPOO - 2015 17

18 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 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()) Introducción a la Programación Orientada a Objetos IPOO - 2015 18 En esta aplicación particular todas las componentes son del tipo Racional.

19 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD Introducción a la Programación Orientada a Objetos IPOO - 2015 19 Matriz Elemento[][] m > Matriz ( fMax,cMax : entero) > establecerElem (f, c: entero, elem: Elemento) copy(m: Matriz) invertirFilas(f1, f2: entero) Asume que la posición es válida Asume que se verificó que f1 y f2 son válidas

20 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD Introducción a la Programación Orientada a Objetos IPOO - 2015 20 Matriz Elemento[][] m > existePos(f, c: entero): boolean obtenerNFil(): entero obtenerNCol(): entero obtenerElem(f, c: entero): Elemento clone(): Matriz equals(m: Matriz): boolean todosNeutros(): boolean Retorna verdadero sí y solo sí cada elemento cumple la propiedad esNeutro

21 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD public void invertirFilas(int f1, int f2){ invertirElem(f1, f2, obtenerNCol()-1); } private void invertirElem(int f1,int f2,int c){ if (c >= 0){ invertirDos(f1, f2, c); invertirElem(f1, f2, c-1); } } private void invertirDos(int f1,int f2, int c){ Elemento e = m[f1, c]; m[f1, c] = m[f2, c]; m[f2, c] = e; } Introducción a la Programación Orientada a Objetos IPOO - 2015 21

22 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD public boolean todosNeutros(){ return todosNeu(obtenerNFil()-1); } private boolean todosNeu(int f){ boolean es = true; if (f >= 0) es = filaNeutros(f, obtenerNCol()-1) && todosNeu(f-1); return es; } private void filaNeutros(int f, int c){ boolean es = true; if (c >= 0) es = m[f,c].esNeutro()&&filaNeutros(f,c-1); return es; } Introducción a la Programación Orientada a Objetos IPOO - 2015 22

23 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 GENERICIDAD abstract class Elemento{ abstract public boolean esNeutro(); } class Pixel extends Elemento { private int r, b, g; … public boolean esNeutro(){ return r == b & b == g; } } class Racional extends Elemento{ private int num, den; … public boolean esNeutro(){ return num == 0; } } Introducción a la Programación Orientada a Objetos IPOO - 2015 23


Descargar ppt "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad."

Presentaciones similares


Anuncios Google