Diseño y Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
Arreglos.
Advertisements

Curso de java básico (scjp)
Curso de java básico (scjp)
Sintaxis básica del lenguaje
Tema 1. Introducción a la programación (Lenguaje java).
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.
ARREGLOS Estructuras de datos.
Vectores en java.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Departamento de Informática Universidad Técnica Federico Santa María Capítulo 2 “Subprogramas/Funciones - Arreglos” Arreglos-Arrays.
Prof. Mayra M. Méndez Anota.  Herramientas  Características  Convenciones  Estructura de una clase  Sintaxis de: métodos, atributos, constructores.
ESTRUCTURA DE DATOS EN JAVA
METODOLOGÍA DE LA PROGRAMACIÓN
Computación II Repaso de java Karina Figueroa Mora.
Metodología de Programación Ayudantía 2 lelagos.ublog.cl 2009.
CAPITULO V ARREGLOS Y CADENAS.
Matrices Prof. Flor Narciso Departamento de Computación
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Introducción a la Programación Orientada a Objetos Arreglos de 2 dimensiones TDA Matriz Implementar un TDA Matriz que brinde operaciones para calcular.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
ArreglosBidimensionales enjava. Sonestructurasdetamañofijoorganizadasporfilasy columnas. Estas estructuras almacenan valores del MISMO TIPO de dato. Cada.
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 DE DATOS NO PRIMITIVOS Los arreglos (arrays) son estructuras de datos homogéneos en el sentido de que todos los elementos que lo componen son del.
El lenguaje de Programación C Fernando J. Pereda.
Clases y Objetos en Java
Taller de Java Universidad de los Andes
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
BREVE INTRODUCCION A LA PROGRAMACION
¿Cómo almacenar grandes cantidades de datos?
Arreglos (Arrays) Programación 1.
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
¿ Que hemos aprendido? Análisis Entendimiento del problema
Colecciones Carlos Fontela, 2008.
¿Cómo almacenar grandes cantidades de datos?
Diseño y Programación Orientada a Objetos
Clases y Objetos en Java
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)
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
Sonia Rueda Herencia y Polimorfismo
Clases y Objetos en Java
Fundamentos de programación Miriam Hernández Escutia
¿Cómo almacenar grandes cantidades de datos?
Tipos Básicos.
Ingeniero en Computación José Alfredo Cobián Campos
Fundamentos de programación
ARREGLOS.
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Arreglos en Java.
MATRICES. ¿QUÉ ES UNA MATRIZ? Una matriz es un espacio bidimensional que se genera en la memoria del computador. Las matrices deben tener un nombre que.

IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Programación Orientada a Objetos
EUPs que imprima la tabla de multiplicar de 2 al 10
UNIDAD VI (continuación) ARREGLO BIDIMENSIONAL
Clases y Objetos en Java
Transcripción de la presentación:

Diseño y Programación Orientada a Objetos Conferencia # 4: TDA Matriz de enteros Facultad Ing. Informática ISPJAE

Contenido Conceptos generales Trabajo con arreglos de múltiples dimensiones en Java TDA Matriz de enteros

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.145..153. 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

¿Cuál estructura de datos usar para almacenar:? Notas de n estudiantes en 1 asignatura Notas de n estudiantes en m asignaturas 5 5 3 4 … 0 1 2 3 … n 5 5 3 4 … 0 1 2 3 … n 3 5 2 3 … . . . . … 4 4 4 4 … 1 … m R/ Arreglo lineal R/ Arreglo matricial

Nota del estudiante i en la asignatura j Arreglo Matricial Nota del estudiante i en la asignatura j 5 5 .. 4 … 0 1 … i … n 3 5 .. 3 … . . .. . … 4 5 .. 4 … 1 … j m 4 4 .. 4 … Notas n*m notas Asignaturas Estudiantes

Arreglo matricial en C++ 0 1 2 1 2 3 4 x int x[5][3]; stack x[1][2]= 6 6 [fila][columna] x zona contigua 5*3 => 15*4bytes

Arreglo multidimensional en Java Un arreglo de arreglos. Un arreglo de referencias a otros arreglos. Cada nueva dimensión se comporta como una colección de otros arreglos internos.

Arreglo multidimensional en Java x Físico X Lógico

Arreglo multidimensional en Java x X Lógico Físico

Arreglo multidimensional en Java x x Lógico Físico

Arreglo multidimensional en Java Declaración Sintaxis Ejemplos: <tipo>[][] <identif.>; int[][] m; <tipo>[] <identif.> []; int [] m[]; <tipo> <identif.> [][]; int m[][];

Arreglo multidimensional en Java stack heap m int[][] m; m= new int[3][2]; stack heap m m[0] m[2] m[1]

Arreglo multidimensional en Java stack heap m int[][] m; m= new int[3][]; m[0]= new int[2] m[2]= new int[3] stack heap m null m[0] m[2] m[1] null null

Arreglo multidimensional en Java stack heap m null m[0] m[2] m[1] m.length  3 m[0].length  2 m[2].length  3

Arreglo multidimensional en Java stack heap m null m[0] m[2] m[1] 3 1 m[0][0]= 3 m[2][1]= 1

¿Fila? ¿Columna? m null stack heap m null stack heap 3 m[0] m[1] 1 1 3 stack heap m null 1 3

Inicialización int[][] m2 = { {1, 2},{4, 5, 6} }; m null stack heap

Arreglo multidimensional de objetos Rectangle[][] mR; mR= new Rectangle[3][] ; for(int i= 0; i < mR.length; i++) { mR[i]= new Rectangle[2]; for (int j= 0; j < mR[i].length; j++) mR[i][j]= new Rectangle() ; }; ¿Cómo queda la memoria?

TDA: Matriz de enteros

Campos Un arreglo de dos dimensiones Orden de la matriz: Cantidad de filas: cantidad de arreglos (tamaño de la colección de referencias) Cantidad de columnas: cantidad de elementos de cada arreglo (tamaño de las otras colecciones)

Métodos Para la construcción Para manipulación de los datos: lectura/escritura Álgebra interna (sin colaborar con otros objetos) Álgebra externa (en colaboración con otros objetos de la propia clase)

Consideraciones Arreglo de referencias: 1ra columna, cantidad elementos = cantidad filas Todos los arreglos igual capacidad:  siempre = cantidad de columnas. Solo se puede añadir/eliminar filas/columnas, pero no elementos aislados. Se utiliza una clase auxiliar para manipular posiciones: RowCol

public class RowCol { private int row, int col; public RowCol(int row, int col) { this.row = row; this.col = col; } public int getRow() {return row;} public void setRow(int row) { if (row >= 0) this.row = row; } public int getCol() {return col;} public void setCol(int col) { if (col >= 0) this.col = col;} }

public class IntMatrix { public static final int DEFAULT_ROW_CAPACITY= 5; DEFAULT_COL_CAPACITY= 5; private int[][] data; private int colCount; private int rowCount;

public IntMatrix(int rowCapacity, int colCapacity ) { if (rowCapacity <= 0 || colCapacity <= 0) data=new int[DEFAULT_ROW_CAPACITY] [DEFAULT_COL_CAPACITY]; else data= new int[rowCapacity] [colCapacity]; } public IntMatrix(){…} public IntMatrix(int[][] source ){…}

public IntMatrix(int[][] source, int rowCount, int colCount) {…} public IntMatrix(IntMatrix source){…} public void set(int row,int col,int item) { if(row < rowCount && col < colCount) data[row][col] = item; } public int get(int row, int col) { return data[row][col];

private void ensureColCapacity(int minCap) { int[][] newData; if(minCap > 0) newData= new int[data.length][colCount + minCap)]; else newData= new int[data.length][colCount + DEFAULT_COL_CAPACITY)]; for(int i= 0 ; i < rowCount ; i++) System.arraycopy(data[i], 0, newData[i], 0, colCount); data = newData; }

public int sum(int row1, int col1, int row2, int col2) { for(int i= row1; i <= row2; i++) for(int j = col1; j <= col2; j++) sum+= data[i][j]; return sum; }

public int sum() { return sum(0, 0, rowCount-1, colCount-1); } public IntMatrix sum(IntMatrix matrix) { // estudio independiente

public IntArray deleteCol(int col) { IntArray deletedCol= new IntArray(getRowCount()); for(int i= 0; i < rowCount; i++) deletedCol.add(data[i][col]); for(int j= col + 1; j < colCount; j++) data[i][j-1]=data[i][j]; clear(0,colCount-1,rowCount-1,colCount-1); colCount--; return deletedCol; }

public RowCol indexBiggerValue( int row1, int col1, int row2, int col2) { int bigger= data[row1][col1]; RowCol rowCol= new RowCol(row1,col1); for (int i = row1; i <= row2; i++) for (int j = col1; j <= col2; j++) if (data[i][j] > bigger) { bigger = data[i][j]; rowCol.setRow(i); rowCol.setCol(j); } return rowCol; }

IntMatrix como instancia miembro Caso de estudio: Ventas de un medicamento

Estudio de un medicamento. Se conoce: unidades vendidas en cada farmacia de una provincia durante cada mes del año. promedio histórico de ventas en cada trimestre del año. Requisitos funcionales: Conocer dado un mes cuántas unidades se vendieron en la provincia. Conocer las farmacias donde se vendió la mayor cantidad de unidades. Conocer los trimestres en que se vendió por encima del promedio histórico.

Venta de Farmacia 1 en Diciembre … Enero Diciembre Farm 1 200 … 100 550 320 70 286 854 324 … Farm n Venta de Farmacia 1 en Diciembre Histórico trimestral 1000 1500 3000 2550

Solución public class SalesMedicin { FloatArray historical; IntMatrix sales;

Solución sales.addRowZero(countPharm); sales.addColZero(12); public SalesMedicin(int countPharm) { this.historical = new FloatArray(4); this.sales= new IntMatrix(countPharm,12); sales.addRowZero(countPharm); sales.addColZero(12); }

Requisitos funcionales Conocer dado un mes cuántas unidades se vendieron en la provincia. public int salesMonth(int month){ return sales.sum(0, month-1, sales.getRowCount()-1, month-1); }

Requisitos funcionales b) Conocer las farmacias donde se vendió la mayor cantidad de unidades.

public IntArray pharmBiggerSales() { IntArray pharSales= sales.sumForRow(0,0, sales.getRowCount()-1, sales.getColCount()-1); IntArray pharBigg= new IntArray(); int index= pharSales.indexBiggerValue();

int bigg= pharSales.get(index); for(int i= 0; i< pharSales.getCount(); i++) if (pharSales.get(i) == bigg) pharBigg.add(i); return pharBigg; }

Requisitos funcionales c) Conocer los trimestres en que se vendió por encima del promedio histórico.

public IntArray trimesterMoreSales() { IntArray trimester= new IntArray(); int sum= 0; float average; for(int month= 0; month < 12; month++) { for(int phar= 0; phar < sales.getRowCount(); phar++) sum += sales.get(phar, month); if((month+1)%3 == 0) { if(sum > historical.average()) trimester.add((month+1)/3); sum= 0; } } return trimester; }

Conclusiones Importancia de implementar TDAs

Estudio Independiente Completar implementación del TDA Matriz de enteros. Comprobar con las implementaciones del doc. Completar implementación del caso de estudio: Ventas de un medicamento

Estudio Independiente Obtener la combinación lineal de m vectores de Rn con los escalares λ1,…, λm. . Proponer diseño para el caso de estudio: Departamento de personal.