El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño.

Slides:



Advertisements
Presentaciones similares
Complejidad Computacional
Advertisements

Complejidad Computacional
Curso de java básico (scjp)
Definición de Clases y Variables de referencia.
Defina una clase TempMinEstacion que encapsule la representación de las temperaturas mínimas registradas en una estación meteorológica en un período y.
Introducción a la Programación Orientada a Objetos Una Universidad administra varias residencias para estudiantes extranjeros. Cada residencia ocupa un.
Tipos de Datos Abstractos Vector de Racionales
El proceso de desarrollo de software
El Proceso de desarrollo de software
El proceso de desarrollo de software
Abstracciones y Modelos
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
El proceso de desarrollo de software
Lección 2 Encapsulamiento
Tratamiento de listas en Java
PROGRAMACION ORIENTADA
Encapsulamiento y Abstracción
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.
Marzo 2007 Lenguajes Visuales Clase III.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
L ISTAS E NLAZADAS No son mas que un conjunto o lista de objetos que a diferencia de los vectores, estas poseen la capacidad de crecer o decrecer. Por.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
ESTRUCTURA DE DATOS EN JAVA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Manejo de Punteros y objetos en memoria dinámica en C++
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Introducción a la Programación Orientada a Objetos VRacional Racional [] arreglo > VRacional (max : entero) > establecerElem (pos : entero, elem : Racional)
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tabla.
Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de ahorro bancaria definimos.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
Estructuras de Datos y Algoritmos Introducción. Texto Requerido: Carrano & Prichard: Data Abstraction and Problem Solving with Java; Walls and Mirrors,
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.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
Introducción a los TADs
HERENCIA.
Introducción a la Programación Orientada a Objetos Arreglos de 2 dimensiones TDA Matriz Implementar un TDA Matriz que brinde operaciones para calcular.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Encapsulamiento Miguel Ángel Rojas Aguilar Esthela Carmina Carranza Cabrera.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Listas Dinámicas.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Introducción a la Programación Orientada a Objetos Ordenamiento Ordenar una estructura de datos consiste en reacomodar sus elementos de manera tal que.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Dependencia.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2016 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Transcripción de la presentación:

El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño una clase es un patrón de comportamiento para un conjunto de objetos. En la implementación una clase es un módulo de software. Una clase que incluye atributos y servicios define un tipo de dato. Una clase que incluye atributos y servicios y encapsula sus atributos, define un tipo de dato abstracto.

Una libreta de contactos mantiene el nombre, número de teléfono móvil, número de teléfono fijo y de un conjunto de personas u organizaciones. La clase Libreta_Contactos encapsula una colección de elementos de clase Contacto, representada con un arreglo parcialmente ocupado. Los elementos se mantienen ordenados alfabéticamente por nombre y están comprimidos de modo que todas las posiciones libres están al final. La clase cliente es responsable de controlar que haya lugar en la libreta antes de agregar un nuevo contacto. Caso de Estudio: Libreta de Contactos

Libreta_Contactos T [] Contacto cant:entero Contacto nombre:String nroMovil: String nroFijo:String String > Libreta_Contactos(max:entero) > nuevo(nc:Contacto) eliminar(c:Contacto) > cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean La cantidad de componentes del arreglo es fija, la cantidad de componentes ligadas es variable. Todas las componentes ligadas están en las primeras cant posiciones. > Contacto (n:String) > igual(c: Contacto):boolean mayor(c: Contacto):boolean

Caso de Estudio: Libreta de Contactos class Libreta_Contactos{ //Atributos de Instancia private Contacto[] T; private int cant; /*Constructor crea una coleccion con capacidad para max elementos*/ public Libreta_Contactos(int max) { T= new Contacto[max]; cant = 0; }

Caso de Estudio: Libreta de Contactos lib … length 6 T cant 0 Libreta_Contactos lib = Libreta_Contactos(6);

Si la libreta de contactos se mantiene ordenada por nombre, el servicio nuevo no puede implementarse asignando el nuevo contacto a la primera posición libre. Para comprender cómo implementar el servicio nuevo comencemos visualizando la libreta de contactos a través de una grilla con capacidad para 6 contactos Caso de Estudio: Libreta de Contactos

NombreNúmero de MóvilNúmero Fijo Observemos que la grilla es un modelo con un alto nivel de abstracción, no modelamos objetos y referencias, nos concentramos en el ordenamiento.

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Davini Laura … … … Consideremos que se agrega un nuevo contacto para Davini Laura, como la grilla está vacía el primer contacto ocupa la primera posición en la grilla. Notemos que no interesan los otros atributos porque la libreta se ordena por nombre.

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Davini Laura … … … Polo Leo … … … Se agrega ahora un nuevo contacto para Polo Leo. Como el nuevo contacto es mayor alfabéticamente a Davini Laura, se agrega al final.

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Davini Laura … … … Polo Leo … … … Se agrega ahora un nuevo contacto para Avila Mario. Como el nuevo contacto es menor alfabéticamente que Davini Laura, se agrega al principio, arrastrando los que siguen una posición hacia abajo.

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Davini Laura … … … Polo Leo … … … … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Davini Laura … … … Polo Leo … … … … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Davini Laura … … … … … … Polo Leo … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … Polo Leo … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Se agrega ahora un nuevo contacto para Parodi Mario. Como el nuevo contacto es menor alfabéticamente que Polo Leo, se agrega en la posición de este contacto, arrastrando a Polo Leo

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … … Se agrega ahora un nuevo contacto para Ramos Marisa. Como el nuevo contacto es mayor alfabéticamente que el último contacto, se agrega al final

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Castro Luis … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … … Se agrega ahora un nuevo contacto para Castro Luis. Como el nuevo contacto es menor alfabéticamente que Davini Laura se arrastran todos los contactos a partir de Davini Laura.

El servicio nuevo tiene que funcionar considerando varios casos diferentes: La libreta está vacía el contacto es: Menor a todos Mayor a todos Mayor al primero pero Menor que el último Asumimos que la clase cliente controla que la libreta no está llena. Caso de Estudio: Libreta de Contactos

La grilla nos permite visualizar la libreta de contactos de manera abstracta para mostrar cómo se agrega cada nuevo contacto en cada caso. El diagrama de objetos, que también es una abstracción, es útil para graficar cómo se administra la memoria, pero no es una buena herramienta para diseñar el algoritmo nuevo. Caso de Estudio: Libreta de Contactos

Algoritmo nuevo DE nc Buscar la posición del primer elemento mayor a nc Arrastrar todos los elementos a partir de esa posición Asignar nc a la posición Incrementar la cantidad de contactos Caso de Estudio: Libreta de Contactos public void nuevo(Contacto nc){ //Requiere que la colección no esté llena int pos = posInsercion(nc,cant); arrastrarDsp (pos,cant-pos); T[pos] = nc; cant++; }

Caso trivial: Si la cantidad de elementos es 0, la posición de inserción es 0 Caso trivial: Si nc es mayor que el último nombre la posición es la última Caso Recursivo: buscar la posición de inserción entre las n-1 componentes Caso de Estudio: Libreta de Contactos private int posInsercion (Contacto nc,int n){ /* Retornar la posición del primer elemento mayor a nc, o 0 si no existe*/ int pos = 0; if (n > 0) if (nc.mayor(T[n-1]) pos = n; else pos = posInsercion (con,--n); return pos; }

Caso de Estudio: Libreta de Contactos private void arrastrarDsp (int pos,int n){ if (n > 0){ T[pos+n] = T[pos+n-1]; arrastrarDsp(pos,--n); } ¿Qué pasa si ya existe un contacto con ese nombre? Modifique la implementación de nuevo de modo que si existe un contacto con ese nombre, no agregue nc

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Castro Luis … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … … Supongamos que se decide eliminar el contacto Castro Luis. Los contactos que siguen deben arrastrarse una posición hacia arriba.

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … Parodi Mario … … … … … … Polo Leo … … … Ramos Marisa … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … … … … Ramos Marisa … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … … … … Ramos Marisa … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … … … … …

Caso de Estudio: Libreta de Contactos NombreNúmero de MóvilNúmero Fijo Avila Mario … … … Davini Laura … … … Parodi Mario … … … Polo Leo … … … Ramos Marisa … … …

El servicio eliminar tiene que funcionar considerando varios casos diferentes: La libreta está vacía el contacto: No pertenece a la libreta Es el primero Es el último Es Mayor al primero pero Menor que el último Observemos que con la modificación en el comando nuevo no puede haber dos contactos con el mismo nombre Caso de Estudio: Libreta de Contactos

Algoritmo eliminar DE c Buscar la posición del c Si existe Arrastrar los elementos desde posición hasta el último Decrementar la cantidad de contactos Caso de Estudio: Libreta de Contactos public void eliminar(Contacto c){ /*Elimina, si existe, el contacto c */ int pos = posElemento (c,cant); if (pos < cant){ arrastrarAnt(pos,cant-pos-1); cant--; } }

Caso de Estudio: Libreta de Contactos Libreta_Contactos T [] Contacto cant:entero Contacto nombre:String nroMovil: String nroFijo:String String ciudad:String > Libreta_Contactos(max:entero) > nuevo(nc:Contacto) eliminar(c:Contacto) > cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean ¿Qué cambios hay que hacer en Libreta_Contactos? > Contacto (n:String) > igual(c: Contacto):boolean mayor(c: Contacto):boolean

Caso de Estudio: Libreta de Contactos Libreta_Contactos T [] Contacto cant:entero Contacto nombre:String nroMovil: String nroFijo:String String ciudad:String > Libreta_Contactos(max:entero) > nuevo(nc:Contacto) eliminar(c:Contacto) > cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean ¿Y si la libreta tienen que quedar ordenada por nroMovil? > Contacto (n:String) > igual(c: Contacto):boolean mayor(c: Contacto):boolean

Caso de Estudio: Libreta de Contactos Libreta_Marcadores T [] Marcador cant:entero Marcador … > Libreta_Marcadores(max:entero) > nuevo(nm: Marcador) eliminar(c: Marcador) > cantMarcador():entero estaLlena():entero pertenece(c:Marcador):boolean > Marcador (n:String) > mayor (c: Marcador):boolean ¿Qué métodos cambian?