Presentación de la materia
Docentes:
Rosita Wachenchauzer <rositaw arroba gmail punto com> Martín Albarracín <mfranzo arroba gmail punto com>
Margarita Buriano <mburiano arroba gmail punto com>
Objetivos de la materia:
Usar estructuras dinámicas de datos.
Implementar estructuras dinámicas de datos.
Analizar las ventajas y desventajas, fortalezas y debilidades de las
múltiples estructuras dinámicas de datos y sus implementaciones.
Analizar y desarrollar algoritmos recursivos.
Analizar la complejidad de algoritmos y estructuras de datos
Presentación de la materia Forma de trabajo:
Utilizaremos como referencia principal de la materia los libros:
ESTRUCTURAS DE DATOS EN JAVA de Mark Allen Weiss PIENSA EN JAVA de Bruce Eckel
Usaremos JAVA como lenguaje de programación de referencia para la realización de ejemplos de los temas tratados en clase y de los trabajos prácticos de la materia.
Realizaremos el desarrollo de ejercicios con lápiz y papel en pseudocodigo
JAVA.
Definición: Pseudo-codigo
En ciencias de la computación, y análisis numérico el pseudocódigo (o falso lenguaje) es una descripción informal y compacta de alto nivel del principio operativo de un programa informático u otro algoritmo, que utiliza las
convenciones estructurales de un lenguaje de programación verdadero, pero que está diseñado para la lectura humana en lugar de la lectura mediante máquina, y con independencia de cualquier otro lenguaje de programación.
WikipediA
Presentación de la materia
Bibliografía básica:
Weiss, Mark Allen. ESTRUCTURAS DE DATOS EN JAVA. ADDISON-WESLEY, 2000.
Eckel, Bruce. Piensa en Java. PEARSON EDUCATION, 2002.
Bibliografía de consulta:
Weiss, Mark Allen. Data structures & problem solving using Java. 4ta Ed. 2010.
Meyer , Bertrand. Object Oriented Software Construction. SECOND EDITION. ISE Inc.
Gamma, E.; Helm, R.; Johnson, R.; Vlissides, J. Patrones de Diseño. Elementos de software orientado a objetos reutilizable. PEARSON EDUCATION S.A. 2003.
Fowler, Martin. UML gota a gota. Addison Wesley Longman de México S.A. de C.V. 1999.
Presentación de la materia
Sitio Web de la materia:
https://sites.google.com/site/algoritmosyprogramacionii2015/
Grupo de la materia:
https://groups.google.com/forum/#!forum/alg-y-prog-ii-2015-untref
Presentación de la materia
Metodología de evaluación
2 parciales y un recuperatorio de cada uno.
2 trabajos prácticos.
Exposición en clase.
Programación Orientada a Objetos (POO)
La POO permite describir el problema en términos del propio
problema, en vez de en términos del sistema en el que se ejecutará el programa final.
Representa los elementos del espacio del problema mediante “objetos” que se comunican dentro del espacio de la solución (y también serán necesarios otros objetos que no tengan su análogo dentro del espacio del problema).
Un objeto tiene un estado y se le puede pedir que lleve a cabo determinadas operaciones. Los objetos del mundo real también tienen características y comportamientos. Por ejemplo, un televisor tiene una pantalla y se puede encender o se puede apagar.
Programación Orientada a Objetos
Alan Kay (uno de los padres de la POO) resumió las cinco
características básicas de Smalltalk (lenguaje de POO puro) que
constituyen un enfoque puro a la programación orientada a objetos:
1.Todo es un objeto: Pensemos en cualquier objeto como una
variable: almacena datos, permite que se le "hagan peticiones",
pidiéndole que desempeñe por sí mismo determinadas operaciones, etc.
1.Un programa es un cúmulo de objetos que se dicen entre sí lo que
tienen que hacer mediante el envío de mensajes. Para hacer una petición a un objeto, basta con "enviarle un mensaje".
Programación Orientada a Objetos
3.Cada objeto tiene su propia memoria, constituida por otros
objetos. Dicho de otra manera, uno crea una nueva clase de objeto construyendo un paquete que contiene objetos ya existentes. Por
consiguiente, uno puede incrementar la complejidad de un programa, ocultándola tras la simplicidad de los propios objetos.
3.Todo objeto es de algún tipo. Cada objeto es un elemento de una
clase, entendiendo por "clase" un sinónimo de "tipo". La
característica más relevante de una clase la constituyen "el conjunto de mensajes que se le pueden enviar".
3.Todos los objetos de determinado tipo pueden recibir los mismos
mensajes. El conjunto de mensajes que puede recibir un objeto se denomina interfaz.
Referencias, Clases y Objetos
Los lenguajes de programación orientados a objetos traen definidos un conjunto de tipos primitivos y permiten que el usuario defina nuevos tipos mediante la construcción de clases.
Una clase define un nuevo tipo de dato. Los elementos de este nuevo tipo (es decir, los valores que puede tomar) se denominan objetos.
Por ejemplo, Java tiene los tipos primitivos:
boolean, char, byte, short, int, long, float, double, void
Y nosotros podríamos definir un nuevo tipo de dato denominado Lampara, que reciba los mensajes: encender(), apagar(), brillar() y atenuar()
Referencias, Clases y Objetos
Todos los tipos que no son tipos primitivos se denominan tipos
referencia. La diferencia entre un tipo primitivo y un tipo referencia
radica en el manejo de la memoria que hacen los lenguajes.
Las variables y las llamadas a función son guardadas en la pila. La Pila reside en la memoria RAM y tiene soporte directo del procesador a través del puntero de pila. Este se mueve hacia abajo para crear mas memoria y hacia arriba para liberarla.
Los valores asignados a las variables de tipos primitivos son guardados en la pila, en la dirección de memoria de la variable.
Referencias, Clases y Objetos
Los valores asignados a las variables de tipos referencia (variables referencia), es decir, los objetos (o también llamados instancias de
clases) se guardan en una sección de memoria distinta denominada
heap (montículo), que también se encuentra en la memoria RAM. Y en la posición de memoria de la variable referencia se coloca la
dirección donde se encuentra alojado el objeto en el heap.
Por ejemplo, Java tiene 3 tipos referencia que vienen definidos en el lenguaje: String (cadenas de caracteres), Array (vectores) y File
(ficheros).
Referencias, clases y Objetos Ejemplo:
Supongamos que tenemos 3 variables, varInt de tipo int, var1 de tipo de tipo Punto y var2 de tipo String a las cuales les asignamos el valor 5, y los objetos (0,0) y “Hola” respectivamente.
Referencias, clases y Objetos
Existen dos tipos de operaciones que pueden hacerse a variables referencia:
Operaciones para examinar o manipular el valor de referencia Asignación (=)
Comparación (==, !=)
Operaciones sobre el objeto referenciado Conversión de tipos
Acceder a un campo interno o invocar un método (mediante
el operador “.”)
Referencias, clases y Objetos Ejemplos en Java:
Asignación (=)
String var1 = “Hola”; String var2 = var1;
Comparación (==, !=)
(var1 == var2) es verdadero si var1 y var2 apuntan al mismo objeto
(var1 != var2) es verdadero si var1 y var2 apuntan a objetos diferentes
Conversión de tipos
int var1 = 12; float var2;
var2 = (float) var1;
Referencias, clases y Objetos
Ejemplos en Java:
Acceder a un atributo interno publico o invocar un método (“.”)
String varNombre = alumno.nombre; Lampara lamparaLiving= new Lampara(); lamparaLiving.iluminar();
Comprobar el tipo de un objeto (instanceof)
if (alumno instanceof Persona) {
System.out.println(alumno.nombre); }
Referencias, clases y Objetos Declaración de una clase en JAVA:
public class CeldaEntero{
// propiedades
private int valorAlmacenado;
//métodos
public int leer(){
return valorAlmacenado; }
public void escribir (int x){ valorAlmacenado = x; }
}
Referencias, clases y Objetos Declaración y utilización de objetos en JAVA:
{…
CeldaEntero b; // la variable b puede referenciar a un objeto de tipo CeldaEntero
b = new CeldaEntero(); // crea un objeto CeldaEntero y hace que b lo referencie b.escribir(53); // ejecuta el método escribir del objeto b
p.add(b); // ejecuta el método add del objeto p pasando a b como parámetro …}
Referencias, clases y Objetos Para poder imprimir en pantalla el estado de un objeto debemos definir el
método toString(). Este método es ejecutado realizamos una salida por pantalla con System.out.println(objeto).
Supongamos que tenemos una clase Persona:
Public class Persona{
Private String nombre = Juan; Private String apellido = Perez;
Public void setNombre(String n) { nombre = n;} Public String getNombre() { return nombre;} Public void setApellido(String n) { apellido= n;} Public String getApellido() { return apellido;} Public String toString(){
System.out.println(“Nombre y Apellido: “ +nombre + “ “ + apellido)} }
Salida en pantalla:
Nombre y Apellido: Juan Perez
Recolección de basura (
Garbage Collector
)
Todos los objetos que no pueden ser referenciados se consideran basura. En
Java, cuando un objeto creado no es referenciado por ninguna variable, la memoria que consume es reclamada automáticamente por un proceso de la máquina virtual denominado Garbage Collector y pasa a estar disponible. Ejemplo en Java:
{…
Persona p1; // la variable p1 puede referenciar a un objeto de tipo Persona
p1 = new Persona(“Jorge”); // crea un objeto Persona y hace que p1 lo referencie p1.setProfesion(“Abogado”); // ejecuta el método setProfesion del objeto p1
p1 = new Persona(“Pedro”); // crea otro objeto Persona y hace que p1 lo referencie …}
En este ejemplo el objeto Persona con nombre “Jorge” y profesión “Abogado” ha quedado sin referencia.