La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Diseño y Programación Orientada a Objetos"— Transcripción de la presentación:

1 Diseño y Programación Orientada a Objetos
Conferencia # 3: TDA Colección Lineal de Enteros Facultad Ing. Informática ISPJAE

2 Contenido Arreglos en Java Arreglos como objetos
Modificador de durabilidad final Tipo de dato abstracto: Colección Lineal de Enteros Clase IntArray como instancia miembro

3 Bibliografía Bruce Eckel Thinking in Java. Tercera Edición. 2002.
Zukowski John. “Programación Java 2. J2SE 1.4”. Volumen 1. Cap. 6. Pág H.M.Dietel:”Como programar en C/C++”. Capítulo 17, epígrafe 17.8 Bjarne Stroustrup “The C++ Programming Language”. Ayuda en línea del Eclipse 3.2

4 Arreglos Concepto C++: int a[10]; a 0 1 2 3 … 9 tamaño físico 4
4byte (int) Concepto C++: int a[10]; a … 9 tamaño físico 4 tamaño lógico

5 Arreglos Declaración en Java Sintaxis Ejemplos:
<tipo>[] <identificador>; int[] x; <tipo> []<identificador>; int []x; <tipo> <identificador>[]; int x[]; int[] x, y[]; int []x, y[]; ¿y?

6 Arreglos Distribución en memoria en C++ int x[10]; x stack
int* x= new int[10]; stack x stack heap x

7 Arreglos Distribución de memoria en Java int[] x; stack heap
x= new int[10]; stack heap x stack heap x

8 Arreglos Ejemplos: C++: Rectangle arr[10]; Java: Rectangle[] arr;
Arreglos de objetos C++: <tipo> <ident>[constante]; Java: <tipo>[] <identificador>; Ejemplos: C++: Rectangle arr[10]; Java: Rectangle[] arr; Clase

9 Arreglos de objetos: C++
Rectangle x[10]; Rectangle* x= new Rectangle[10]; Rectangle** x= new Rectangle*[10]; stack x stack x heap x[0]= new Rectangle(); stack x heap

10 Arreglos de objetos: Java
Rectangle[] x; stack x heap x= new Rectangle[5]; stack x null null null null null heap x[0]= new Rectangle(); stack x null null null null heap x.length  5

11 Inicialización en Java
x.length  5 int[] x = {0, 1, 2, 3, 4}; int[] x = new int[] {0, 1, 2, 3, 4}; Rectangle[] x = {new Rectangle(), new Rectangle(), new Rectangle()}; x.length  3

12 Arreglos como parámetros en Java
Se transfiere la referencia Por valor, solo parámetros de algún tipo primitivo (int, float, boolean, char) Arreglos anónimos obj.metodo(new int[]{9,5,8}); Se implementa chequeo de rango para los índices. ArrayIndexOutOfBoundsException

13 Comprobación Describa el estado de la memoria después de cada una de las sentencias siguientes : int[] x, y; x= new int[] {0, 1, 2, 3, 4}; y= x;

14 Modificador de durabilidad final
Se utiliza para declarar variables, y parámetros constantes. También se pueden declarar métodos final. Se estudiará más adelante.

15 Uso de final. Ejemplos //declara e inicializa
private final int MAX = 100; //declara private final int MAX; …if (a > b) MAX = 100; //inicializa con 100 else MAX = 200; //inicializa con 200

16 Uso de final. Ejemplos public class Circle {
private final Point point; //refer. const. public void setX(int x) { point.setX(x); //objeto no es const. } …}

17 Arreglos como objetos x.length x.clone()
System.arraycopy(x,0,y,0,x.length); int[] y= Arrays.copyOf(x,x.length); Arrays.fill(x,1); Arrays.sort(x); int pos= Arrays.binarySearch(new int[]{1,4,6,8}, 6); //pos= 2

18 TDA: Colección lineal de enteros

19 public class IntArray {
public static final int DEFAULT_CAPACITY = 5; private int count; private int[] data; public IntArray() { this(DEFAULT_CAPACITY); }

20 public IntArray(int capacity) {
if (capacity <= 0) data= new int[DEFAULT_CAPACITY]; else data= new int[capacity]; } public IntArray(int[] source, int sourceCount) {…} public IntArray(int[] source) {…} public IntArray(IntArray source) {…}

21 public void add(int item) {
if (count == data.length) ensureCapacity(count + 1); data[count++]= item; } public int find(int item) { int i= 0; while (i<count && item!=data[i]) i++; return i < count ? i : -1;

22 public void add(int index, int item) {
if (count == data.length) ensureCapacity(DEFAULT_CAPACITY); System.arraycopy(data,index,data, index+1,count-index); data[index]= item; count++; }

23 public void addAll(int[] source, int
countSource) { for (int i= 0; i < countSource; i++) add(source[i]); } public void addAll(int[] source) { addAll(source, source.length);

24 public void addAll(IntArray source) {
for(int i= 0; i<source.getCount(); i++) add(source.get(i)); } public void clear() { if (count > 0){ Arrays.fill(data, 0, count, 0); count = 0;

25 public float average() {
return (float)sum()/count; } public boolean exists(int item) { return find(item) != -1; public boolean isEmpty() { return count == 0;

26 public int get(int index) {
return data[index]; } public int getCount() { return count;

27 private void ensureCapacity(int
minCapacity) { int[] newData= new int[data.length + minCapacity)]; System.arraycopy(data, 0,newData, 0, count); data = newData; }

28 public int findLast(int item) {
int i = count - 1; while (i >= 0 && item != data[i]) i--; return i >= 0 ? i : -1; } public int set(int index, int item) { int result = data[index]; data[index] = item; return result;

29 public int remove(int index) {
int result = data[index]; if (index != --count - 1) System.arraycopy(data,index+1, data,index,count-index); data[count] = 0; return result; }

30 public int countEqualNumber(int number) { …}
public int countBiggerThan(int number) { …} public int countSmallerThan(int number) {…} public int indexBiggerValue() {…} public int indexLowerValue() {…} public int sum() {…}

31 ¿Qué hacer si la colección no es de enteros?
float ¿Soluciones?

32 Soluciones private float[] data; public boolean exists(float item)
1) public class FloatArray { private float[] data; public boolean exists(float item) { return find(item) != -1; } … } 2) Utilizar tipos genéricos o plantillas

33 IntArray como instancia miembro
Procesar los resultados de Cuba en Atenas. 12 equipos. Cada equipo: nombre, colectivo o individual, cantidad de hombres y de mujeres, medallas de oro, plata y bronce. Se conoce el total de medallas alcanzadas por el país en las últimas 5 olimpiadas precedentes en las que ha participado.

34 Ejemplo Sidney … Cuba 10 12 8 20 50 no 8 6 2 3 5 7 1 si 27 … Equipo
Colec Hom Muj Oro Plat Bron Judo no 8 6 2 3 Atlet 5 7 1 BaseB si 27 Sidney Cuba 10 12 8 20 50

35 Se desea obtener Total de deportistas que participaron.
Total de medallas de un equipo. Total de medallas obtenidas. Equipo colectivo con más medallas de oro. Promedio de medallas de un equipo Si las medallas obtenidas en Atenas superan el promedio de medallas obtenidas en las 5 olimpiadas precedentes.

36 Con arreglos paralelos
public class Olympic { private String[] arrTeam; private boolean[] arrIndividual; private int[] arrGold; private int[] arrSilver; private int[] arrBronze; private int[] arrFemale; private int[] arrMale; private int[] arrHistorical;

37 Con instancias colecciones
public class Olympic { private StringArray team; private BooleanArray individual; private IntArray gold; private IntArray silver; private IntArray bronze; private IntArray female; private IntArray male; private IntArray historical; …

38 Modelando todos los objetos
Team int bronze int female int gold boolean indiv String name int male int silver Olympic int count Team[] team IntArray historical 1 *

39 Conclusiones Importancia de implementar TDA


Descargar ppt "Diseño y Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google