Diseño y Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

Marzo 2007 Lenguajes Visuales Clase III.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
Colecciones.
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Herramientas de polimorfismo y herencia en C++
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Detalles Generales sobre Java
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
Tipos List y Set con tipos genéricos Estructura for extendido Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
Tipos List y Set con tipos genéricos
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Clases y Objetos en Java
Unidad Didáctica 11 Reutilización Versión 1.0.0
Taller de Java Universidad de los Andes
Ingeniería Directa. Generar código a través de modelos se le conoce como ingeniería directa.
Programación Avanzada
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Clases y Objetos.
Herencia y Clases Abstractas
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
ArrayList Collecciones
EL MUNDO DE LOS OBJETOS PROGRAMANDO EN JAVA.
Diseño y Programación Orientada a Objetos
Fundamentos de la programación orientada a objetos
Colecciones Carlos Fontela, 2008.
Métodos en Java.
Diseño y Programación Orientada a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
LISTAS..
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Sonia Rueda Herencia y Polimorfismo
Clases y Objetos en Java
Polimorfismo y Métodos Virtuales
Estructuras de datos y algoritmos
Programación Orientada a Objetos I Unidad 4 Relaciones entre clases: herencia.
Herencia en C#.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Plantillas (Templates)‏
Ingeniero en Computación José Alfredo Cobián Campos
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Curso Angularn Tema 01b 15/01/2019 Curso JavaScript.
String, random y stream en java
Casos de prueba con JUnit
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Templates (en español: Pantillas, modelos, patrones)‏
Clases abstractas e interfaces
Clases y Objetos en Java
Transcripción de la presentación:

Diseño y Programación Orientada a Objetos Conferencia # 9 Clases genéricas TEMA # 3: Herencia y Polimorfimo Facultad Ing. Informática ISPJAE

Contenido Clases y funciones genéricas. Implementación de funciones miembros de clases parametrizadas. Instanciación de clases parametrizadas. Clase genérica ArrayList

Introducción Uno: a, b, c Dos: a, d, e ¿Abstracta o concreta? Tres int b; int c; Dos int d; int e; Tres int a; Uno: a, b, c Dos: a, d, e ¿Abstracta o concreta?

Uno Dos resp1 a2+b+c a2*d*e resp2 b*c d+a a[i].resp1(); Tres[] a; int b; int c; Dos int d; int e; Tres int a; Uno Dos resp1 a2+b+c a2*d*e resp2 b*c d+a a[i].resp1(); a[i].resp2(); Tres[] a;

Tres #int a; +resp1(){return a*a;} +abstract resp2(); Uno -int b; -int c; +resp1(){return super.resp1()+b+c;} +resp2(){return b*c;} Dos -int d; -int e; resp1(){return super.resp1()+d*e;} resp2(){return d+a;}

Clases genéricas Necesarias cuando al momento de implementar el código no se conocen algunos de los tipo de datos que se deben procesar. Colecciones Juan Ana Eva

Clases genéricas Mayor nivel de abstracción. Especifican un parámetro en la definición, que representa un tipo de dato durante la ejecución. clases parametrizadas plantillas en C++ (template)

En Java Existen clases genéricas predefinidas desde las primeras versiones. A partir de la versión 1.5 se introduce la posibilidad de declarar clases genéricas. Generador de código parametrizado

Métodos genéricos El tipo de algunos de los datos que recibe o que se utilizan internamente, se especifican cuando se invoca al método.

Declaración Clase o interfaz Clases genéricas public class C <T1,…,Tn> { ... } Métodos genéricos public <T1,…, Tn> void m(T1 p1, …, Tn pn) { Tipos de datos (clases) que se especifican al crear objetos Clase o interfaz

Ejemplo public class MYClass<A,B> { … }

Instanciando clases genéricas por defecto heredan de Object Igual cantidad No permite primitivos: int, float, … public class MYClass<A,B> { … } MYClass <String, Integer> myclass= new MyClass<String, Integer>(); MYClass <String, Person> myclass; MYClass <String, MYClass <OtherClass,String>> myclass;

Contenedoras genéricas Variante 1: public class GenericCollection<T>{ private Objetc[] data; … } Variante 2: private T[] data; …

Implementación (Var 1) public class GenericCollection<T> { private Object[] data; private int count; private static final int DEFAULT_CAPACITY =10; public GenericCollection() { this(DEFAULT_CAPACITY); }

Implementación (Var 1) public GenericCollection(int cap) { if(cap > 0) data= new Object[cap]; else data= new Object[DEFAULT_CAPACITY]; count = 0; }

Implementación (Var 1) private void ensureCapacity(int minCapacity) { … Object[] newData= new Object[ …]; }

Implementación (Var 1) public void add(T t) { if (count == data.length) ensureCapacity(count + 1); data[count++] = t; } public T get(int i){ if(inRange(i)) return (T)data[i]; else return null;

Implementación (Var 1) private boolean inRange(int index) { boolean result= false; if(index >=0 && index < count) result= true; return result; }

Implementación (Var 1) public T remove(int index) { T oldValue= null; if(inRange(index)) { oldValue = (T)data[index]; int num = count - index - 1; if(num > 0) System.arraycopy(data, index+1, data, index, num); data[--count] = null; } return oldValue; } }

Implementación (Var 2) public class GenericCollection<T> { private T[] data; private int count; private static final int DEFAULT_CAPACITY=10;

Implementación (Var 2) public GenericCollection(T[] t, int count) { data = t; this.count = count; }

Implementación (Var 2) public GenericCollection() { count = 0; data = (T[]) new Object[DEFAULT_CAPACITY]; }

Implementación (Var 2) public T get(int i) { T result= null; if (inRange(i)) result= data[i]; return result; }

Implementación (Var 2) public T remove(int index) { T oldValue= null; if (inRange(index)) { oldValue = data[index]; … result= oldValue; } return result;

Clases genéricas con parámetros restringidos Puede ser Person o cualquiera de sus derivadas public class GenericCollection<T extends Person> {…} Ejemplos: GenericCollection<Teacher> myCollection = new GenericCollection<Teacher>(); GenericCollection<Worker> myCollection = new GenericCollection<Worker>();

Utilidad ¿Si no se especifica? public class GenericCollection<T extends Person> {… public T findById(String id){ int i= 0; while (i < count && !((T)data[i]).getID().equalsIgnoreCase(id)) i++; return i < count? (T)data[i] : null; } ¿Si no se especifica? ¿Qué pasa?

Jerarquía de clases genéricas public class NumberCollection<T> extends GenericCollection<T> { … public T sum() { (T)s= 0; for(int i=0; i , count; i++) s+= (T)data[i]; return s; } …}

Clase genérica ArrayList AbstractList<E> ArrayList<E>

Clase genérica ArrayList public class ArrayList<E> extends AbstractList<E> …{ … private Object[] elementData; private int size;

Algunos métodos de ArrayList ArrayList(): Construye lista vacía para 10 elementos ArrayList(int capacity): Construye lista vacía para capacity elementos. boolean add(E o): Agrega o al final de la lista E get(int index): devuelve elemento en index. E remove(int index): Elimina elemento en index.

Ejemplo de uso de ArrayList ArrayList<Person> store = new ArrayList<Person>(20); Person item = new Person(); store.add(item);

Modificando CheesCollection public class CheesCollection{ private ArrayList<Cheese> cheeses; public CheesCollection() { cheeses = new ArrayList<Cheese>(); } …

//Obtener importe total de la factura public float amount() { float sum = 0; for(int i = 0; i < cheeses.size(); i++) sum += cheeses.get(i).price(); return sum; }

//Obtener todos los quesos esféricos: public ArrayList<SphereCheese> sphereCheeseColl() { ArrayList<SphereCheese> sphChe = new ArrayList<SphereCheese>(); for(int i = 0; i < cheeses.size(); i++) if(cheeses.get(i) instanceof SphereCheese) sphChe.add((SphereCheese) cheeses.get(i)); return sphChe; }

Estudio Independiente Caso de estudio: Escalafón para Técnicos Medio de Informática. Motivación Caso de estudio Integradores. Patrón Singleton