• No se han encontrado resultados

Tipos de datos abstractos. Abstract Data Types (ADT)

N/A
N/A
Protected

Academic year: 2022

Share "Tipos de datos abstractos. Abstract Data Types (ADT)"

Copied!
19
0
0

Texto completo

(1)

Tipos de datos abstractos Tipos de datos abstractos

Abstract Data Types (ADT)

(2)

Tipos primitivos Tipos primitivos

Soportados directamente por el procesador

Operaciones aritmético/lógicas en estos tipos de datos

e.g. Tipos primitivos en Java

byte float boolean char

short double

int long

(3)

Tipos de datos abstractos (ADT) Tipos de datos abstractos (ADT)

Proveen abstraciones de más alto nivel

Buscan mejorar la modularidad del código

Se componen de valor y operaciones

Encapsulan el valor del tipo

Los clientes hacen uso a través de la interfaz de programación (API – Application Program Interface)

(4)

Ejemplo: ADT Fecha Ejemplo: ADT Fecha

Objetivo: Representar fechas según un calendario, e.g. gregoriano.

Su valor corresponde a una fecha. Su

representación interna del dato se puede lograr de muchas formas, e.g. tres números enteros.

Sus operaciones en su interfaz pueden incluir:

Diferencia entre fechas (calcular la edad)

Días desde el comienzo del año

Fechas en un rango

(5)

Roles respecto a un ADT Roles respecto a un ADT

Cliente/Usuario : Hace uso del ADT a través de su interfaz de programación (API). El ADT

oculta todos los detalles de la implementación (representación, implementación de las

operaciones)

Implementador del ADT: Decide la

representación del valor y los algoritmos para implementar las operaciones del ADT.

(6)

Beneficios de los ADT Beneficios de los ADT

Alto nivel de abstracción: Modelan el problema a resolver. Facilitan entender y desarrollar la

solución.

Encapsulación: Solo se accede a través de su interfaz pública. Oculta representación e

implementación. Garantiza el uso consistente.

Modularidad: Fácilmente se pueden hacer cambios a la representación y la

implementación del ADT sin afectar código cliente. Facilita la reutilización.

(7)

Implementación de un ADT Implementación de un ADT

ADT valor operaciones

clase variables de instancia (privadas)

métodos (públicos)

Dato del tipo ADT Instancia de la clase:

Objeto

(8)

Ejemplo: Implementación del ADT Ejemplo: Implementación del ADT

Fecha Fecha

ADT Fecha valor: fecha operaciones

clase Fecha variables de

instancia:

año, mes, día métodos:

diferencia diaDelAño

Un dato tipo Fecha Instancia de la clase Fecha new Fecha(a,m,d)

(9)

Otro ejemplo: ADT Contador Otro ejemplo: ADT Contador

Un tipo de dato abstracto que representa un conteo de eventos.

Interfaz pública

void incrementar() // incrementar el contador

int obtenerConteo() // obtener el valor

Contador() // Constructor del Contador

Ejemplo cliente: Software de conteo de votos

(10)

Notas Java Notas Java

Variables de instancia privadas garantizan el encapsulamiento del valor. La representación es oculta al cliente.

Métodos de instancia públicos constituyen el API. La implementación es oculta al cliente.

Métodos estáticos: Bibliotecas de funciones. No están asociados al ADT pues no tienen acceso a las variables de instancia.

(11)

Ejemplos de bibliotecas Ejemplos de bibliotecas

Bibliotecas del Java

java.lang.Math

java.util.Arrays

Texto guía

edu.princeton.cs.algs4.StdIn

edu.princeton.cs.algs4.StdOut

edu.princeton.cs.algs4.StdDraw

edu.princeton.cs.algs4.StdRandom

edu.princeton.cs.algs4.StdStats

(12)

Método

Método main main

Método estático que busca la máquina virtual para ejecutar programas.

Por ejemplo

java paquete.Clase ejecuta el main de Clase.

(13)

Pruebas unitarias Pruebas unitarias

Pruebas para verificar el correcto funcionamiento de una clase

Se considera una buena práctica de

programación incluir pruebas unitarias de cada clase (se pueden hacer en el main de cada

clase).

Existen herramientas para formalizar el proceso de pruebas unitarias, e.g. JUnit.

(14)

Herencia en Java Herencia en Java

Hay dos tipos

Herencia de interfaces

Se logra con interfaces (implements).

Las clases que implementan la interfaz se dice que son del subtipo de la interfaz.

Herencia de implementación

Se logra con la herencia (extends).

Las clases que heredan de una superclase se denominan subclases.

Se heredan implementaciones, pero se pueden sobre- escribir.

(15)

Ejemplo:

Ejemplo:

Herencia de Interfaces Herencia de Interfaces

<<interface>>

Punto2D

Punto2DCartesiano Punto2DPolar

+double getX() +double getY()

+double distancia(Punto2D)

+double getX() +double getY()

+double distancia(Punto2D)

+double getX() +double getY()

+double distancia(Punto2D)

(16)

Ejemplo:

Ejemplo:

Herencia de Implementación Herencia de Implementación

<<interface>>

Punto2D

Punto2DCartesiano Punto2DPolar

Punto2DSupClase

+double distancia(Punto2D)

Superclase:

Implementación común del método distancia

+double getX() +double getX()

+double getX() +double getY()

+double distancia(Punto2D)

(17)

Herencia de Object Herencia de Object

Toda clase es descendiente de Object

Algunos métodos importantes a considerar, que en muchos casos se deben sobre-escribir al

implementar un ADT:

boolean equals(Object x)

Comparar igualdad con otro objeto. Debe ser falso si el otro objeto es null o de diferente clase. Debe ser relación de equivalencia.

(18)

Métodos heredados de Object Métodos heredados de Object

int hashCode()

Retorna un código hash asociado al objeto. Debe ser consistente e idealmente objetos iguales deben

retornar el mismo código.

String toString()

Retornar una representación alfanumérica del objeto.

Class getClass()

Retorna la clase a la que pertenece el objeto

(19)

Ejemplo: Sobre-escritura de los Ejemplo: Sobre-escritura de los

métodos heredados de Object métodos heredados de Object

public class Punto2DCartesiano implements Punto2D { /**

* Obtener una representacion textual del objeto */

public String toString() {

return "("+getX()+","+getY()+")";

} /**

* Determinar igualdad entre puntos */

public boolean equals(Object a) { if (a==null) return false;

if ( !(a instanceof Punto2D) ) return false;

Punto2D px = (Punto2D) a;

if (px.getX()==this.getX() && px.getY()==this.getY()) return true;

return false;

}

Referencias

Documento similar

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

Por lo tanto, en base a su perfil de eficacia y seguridad, ofatumumab debe considerarse una alternativa de tratamiento para pacientes con EMRR o EMSP con enfermedad activa

Si bien el neofuncinalismo no niega el objetivo final de la unidad política — a ñ o s antes Monnet había influido sobre Churchill para que el primer ministro inglés lanzara

Avner le respondió que cierto año escuchó al Rambán enseñando la parashá Haazinu y destacó que en el canto de Haazinu estaban contenidos todos los preceptos y todo lo que iba a

II.- CIMENTACIONES, MUROS Y ESTRUCTURAS EN CONTACTO Micropilote Ø150. TODOS

Nombre y firma del representante legal, familiar Nombre y firma del cirujano dentista tratante tutor, padre o

Pero antes hay que responder a una encuesta (puedes intentar saltarte este paso, a veces funciona). ¡Haz clic aquí!.. En el segundo punto, hay que seleccionar “Sección de titulaciones