Tema 2: Clases y Objetos

Documentos relacionados
Tema 1 Introducción al paradigma de programación orientado a objetos

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Estructuras de Datos

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

CLASE 10 - ESTRUCTURAS DE DATOS DINÁMICAS

Tema 6. Gestión dinámica de memoria

Tema 4- Representación Enlazada

Tema: Tipos Abstractos de Datos (TAD s) en C++.

2.- PROGRAMACIÓN ORIENTADA A OBJETOS

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

Estructuras de Datos Clase 4 Pilas y colas

GESTIÓN DE MEMORIA DINÁMICA

Implementación de las Clases Pila, Cola, Lista y Arbol

Estructuras de Datos Dinámicas

Estructura de Datos L I S T A

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Examen Teórico Convocatoria de Junio de 2012

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Programación orientada a objetos I

Estructuras de Datos. 14 de junio de Apellidos

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Implementación de las Clases Pila, Cola, Lista y Arbol

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1

! Fundamentos de la POO. ! Comportamiento y estado. ! Clases y objetos en Java

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

Ejercicio 1 (proyecto prlistas, paquete listas)

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

PROGRAMACIÓN GENÉRICA

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

LEA ATENTAMENTE ESTAS INSTRUCCIONES ANTES DE COMENZAR LA PRUEBA

Estructuras Enlazadas AyED UTN-BA

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

INGENIERIA DE SISTEMAS 19 ESTRUCTURAS DE DATOS (Listas simples) ARBOLES

Bloque II. Elementos del lenguaje de programación Java

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Programación Orientada a Objetos en C++

CI2126 PRÁCTICA 9: TAD COLA. 1) Implemente las operaciones C_Insert y C_Remove del TAD COLA usando a. un arreglo. La estructura sería:

Sólo una opción es correcta en cada pregunta. Cada respuesta correcta suma 1 4. puntos. Cada respuesta incorrecta resta 1 12

12. Tipos de atributos

Capitulo V Listas Enlazadas

Tema 2: Clases y Objetos en Java. Programación Orientada a Objetos Curso 2010/2011

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

18. Interfaces Declaración de una interfaz

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Temario. Tema 5. Estructuras de Datos no Lineales. 5.1 Árboles Binarios 5.2 Árboles n-arios

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Estructuras de Datos Clase 4 Pilas y colas

Tipos de Datos Abstractos (TDA)

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato));

LISTAS CIRCULARES. // Métodos private CElemento() {} // constructor. ultimo

Solución práctico 6 Tipos Abstractos de Datos Lista, Pila y Cola

Taller de Programación I. Tema 08: Estructuras Dinámicas de Datos en Java

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2016/2017

Unidad Nº V Listas Enlazadas

LISTAS ENLAZADAS DOBLES C++

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Segundo parcial de Programación 2

12. COLAS Introducción Fundamentos

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3

CONTENEDORES DE LA BIBLIOTECA

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

3.- Desarrollar las clases Pluma, Agenda y Movil escribiendo la menor cantidad de código posible sin por ello perder claridad.

Tipos Recursivos de Datos

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Soluciones. boolean pruebaiteraseriegeometrica () { Serie s= new SerieGeometrica (1, 2); return (s.iterator() instanceof IteraSerieGeometrica); }

Las FILAS. ING PEDRO BELTRÁN CANESSA Estructuras de Datos 1

Tema 6: Memoria dinámica

Introducción a OOP. Programación Orientada a Objeto

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

Examen Teórico. Convocatoria de Febrero de 2016

Tema 2: Programación basada en Objetos

Tema: Tipos Abstractos de Datos (TAD s) en C#.

Estructura de Datos: Lista. Facultad Ingeniería y Tecnología Informática Tecnicatura en Programación de Computadoras. Autora: Prof.

Curso de Java POO: Programación orientada a objetos

Pilas Motivación

Conceptos Básicos. Programación Orientada a Objetos 2

Programación Introducción al Diseño de Tipos Abstractos de Datos

Programación TADs Lineales Lista Pila Cola

Los Constructores(1)

Programación II Objetos en Java

Tema 4. Estructuras Dinámicas

Programación de sistemas Listas enlazadas

Segundo Parcial de Programación 2 7 de junio de 2017

ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C

Transcripción:

Tema 2: Clases y Objetos Anexo: tipo de datos Pila Programación Orientada a Objetos Curso 2017/2018

Características del paradigma OO Curso 2017/2018 Programación Orientada a Objetos 2

Características del paradigma OO Curso 2017/2018 Programación Orientada a Objetos 3

Abstracción. Tipo de datos Pila Definición del tipo de datos Pila: inserta(x) añade x a la pila convirtiéndolo en el nuevo tope recupera() devuelve el elemento situado en el tope suprime() elimina el elemento situado en el tope vacía() devuelve verdadero si está vacía Fuente: Apuntes TP Juan Antonio Laguna Curso 2017/2018 Programación Orientada a Objetos 4

Pila Especificación en C En C, la especificación de un tipo de datos se realiza en ficheros cabecera (.h) #ifndef PILA_H #define PILA_H typedef int Elemento; typedef struct PilaRep * Pila; Pila crea(); void libera(pila p); void inserta(pila p, Elemento e); void suprime(pila p); Elemento recupera(pila p); int vacia(pila p); #endif Curso 2017/2018 Programación Orientada a Objetos 5

Pila Implementación en C La implementación de un tipo de datos se realiza en los ficheros de código fuente (extensión.c) Para un mismo tipo de datos podemos tener diferentes implementaciones. Así, por ejemplo, un pila puede ser implementada: Estática, basada en un array para almacenar los elementos. Dinámica, utilizando nodos enlazados, donde cada nodo contiene un elemento. Pila.h (definición TAD) PilaEstatica.c (representación Array) PilaDinamica.c (representación Nodos Enlazados) Curso 2017/2018 Programación Orientada a Objetos 6

Pila Estática - C #include"pila.h" #include<stdlib.h> PilaEstatica.c #define MAX 100 struct PilaRep Elemento elem[max]; int tope; ; Pila crea() Pila p = malloc(sizeof(struct PilaRep)); p->tope = -1; return p; void libera(pila p) free(p); // continúa Curso 2017/2018 Programación Orientada a Objetos 7

Pila Estática C // continúa void inserta(pila p, Elemento e) p->tope++; p->elem[p->tope] = e; void suprime(pila p) p->tope--; Elemento recupera(pila p) return p->elem[p->tope]; int vacia(pila p) return (p->tope==-1); int llena(pila p) return (p->tope==max-1); PilaEstatica.c Curso 2017/2018 Programación Orientada a Objetos 8

Pila estática C En C conseguimos aplicar ocultación de la información gracias a que la estructura de datos se define en el fichero de código fuente (struct PilaRep). Por tanto, el código que utilice el tipo de datos pila no conoce ni tiene acceso a la estructura de datos. Curso 2017/2018 Programación Orientada a Objetos 9

Pila Estática Java En Java, el concepto de clase permite especificar un tipo de datos e implementarlo en el mismo módulo. Además, ofrece encapsulamiento: la estructura de datos y el comportamiento (métodos) se definen conjuntamente en el mismo módulo. La función crea en C tiene el rol de un constructor de la clase. En Java, la memoria se libera automáticamente. Por tanto, no es necesario proporcionar una función libera. Los métodos no tienen como parámetro la pila. Trabajan sobre el objeto receptor de la llamada (this). Curso 2017/2018 Programación Orientada a Objetos 10

Pila Estática Java package pilas; public class PilaEstatica private static final int MAX = 100; // atributos de implementación private int[] elem; private int tope; public PilaEstatica() this.elem = new int[max]; this.tope = -1; // No hay destructor (libera) // continúa Curso 2017/2018 Programación Orientada a Objetos 11

Pila Estática Java // continúa public void inserta(int e) this.tope++; this.elem[this.tope] = e; public void suprime() this.tope--; public int recupera() return this.elem[this.tope]; public boolean vacia() return this.tope == -1; // Método para pilas limitadas public boolean llena() return this.tope == MAX - 1; Curso 2017/2018 Programación Orientada a Objetos 12

Encapsulación en Java public class PilaEstatica Estructura private static final int MAX = 100; private int[] elem; private int tope; public void inserta(int e) Comportamiento // this.tope++; this.elem[this.tope] = e; public void suprime() this.tope--; Curso 2017/2018 Programación Orientada a Objetos 13

Ocultación de Información en Java public class PilaEstatica Estructura Comportamiento final static int N = 100; int[] datos = new int[n]; int tope = -1; void inserta(int e) tope = tope +1; datos[tope] = x; void suprime() Privado Privado Privado Curso 2017/2018 Programación Orientada a Objetos 14

Pila Dinámica C #include "Pila.h" #include <stdlib.h> struct PilaRep Elemento elem; Pila sig; ; Pila crea() Pila p = malloc(sizeof(struct PilaRep)); p->sig = NULL; return p; void libera(pila p) while (p!= NULL) Pila aux = p; p = aux->sig; free(aux); // continúa... Curso 2017/2018 Programación Orientada a Objetos 15

Pila Dinámica C // continúa void inserta(pila p, Elemento e) Pila aux = malloc(sizeof(struct PilaRep)); aux->elem = e; aux->sig = p->sig; p->sig = aux; void suprime(pila p) Pila aux = p->sig; p->sig = p->sig->sig; free(aux); Elemento recupera(pila p) return p->sig->elem; int vacia(pila p) return (p->sig==null); Curso 2017/2018 Programación Orientada a Objetos 16

Pila Dinámica - Java En la implementación en C de la pila dinámia, el tipo que representa a la Pila tiene una definición recursiva: el campo sig es de tipo Pila. En la implementación Java optamos por introducir un tipo Nodo. Este nuevo tipo de datos debe tener un uso restringido a la implementación de la pila. Por tanto, la declaración del tipo tiene visibilidad a nivel de paquete: Solo los tipos de datos del paquete pilas pueden utilizar el tipo Nodo. Curso 2017/2018 Programación Orientada a Objetos 17

Pila Dinámica - Java package pilas; //Declaraciones a nivel de paquete class Nodo // Visibilidad privada // La implementación de la pila no tiene acceso private final int dato; private final Nodo sig; Nodo(int dato, Nodo sig) this.dato = dato; this.sig = sig; int getdato() return dato; Nodo getsig() return sig; Curso 2017/2018 Programación Orientada a Objetos 18

Pila Dinámica - Java package pilas; public class PilaDinamica private Nodo tope; public PilaDinamica() this.tope = null; public void inserta(int e) Nodo nuevo = new Nodo(e, this.tope); this.tope = nuevo; public void suprime() Nodo borrar = this.tope; this.tope = borrar.getsig(); // continúa Curso 2017/2018 Programación Orientada a Objetos 19

Pila Dinámica - Java package pilas; public class PilaDinamica // public int recupera() return this.tope.getdato(); public boolean vacia() return this.tope == null; // No tiene método llena Curso 2017/2018 Programación Orientada a Objetos 20

Programa en C Un programa en C no necesita conocer la implementación de la pila que se está utilizando. La implementación se enlaza durante la compilación. #include <stdio.h> #include "pila.h" int main() Pila pila = crea(); inserta(pila, 3); inserta(pila, 5); int valor = recupera(pila); printf("cima de la pila: %d", valor); // 5 libera(pila); return 0; Curso 2017/2018 Programación Orientada a Objetos 21

Programa en Java En cambio, un programa Java sí necesita conocer la implementación (clase) de la pila que utiliza. No obstante, en el tema 3 se introduce el concepto de interfaz que resuelve en parte este inconveniente. public class Programa public static void main(string[] args) PilaEstatica pila = new PilaEstatica(); pila.inserta(3); pila.inserta(5); int valor = pila.recupera(); Importante: las operaciones se aplican sobre el objeto System.out.printf("Cima de la pila: %d", valor); Curso 2017/2018 Programación Orientada a Objetos 22