CC 1002: Introducción a la Programación Clase 19

Slides:



Advertisements
Presentaciones similares
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Advertisements

Programación orientada a objetos Capítulo 3 Interacción de objetos.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
UNA INTRODUCCIÓN A PROGRAMAR Con pseudocódigo Created by P.Jones 2014.
RubyNote ARCHIVOS EN RUBY HECHO POR: FRANCISCO ALVAREZ AGUILA.
Microsoft Office 2007 Introducción a Access. Una base de datos es una colección de información relacionada entre si y almacenada en una o más computadoras.
Periodo II Técnicas de programación. Sin Parámetros Con parámetros Funciones.
Administración de Sistemas Gestores de Bases de Datos.
PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento y constructores.
Introducción a la Programación Multimedial
Clases y Objetos.
METODOLOGÍA DE SISTEMAS
PROGRAMACIÓN ORIENTADA A OBJETOS
Programación orientada a objetos
ROBERTO PINEDA FLORES. ALEXIS JULIAN VELAZQUEZ NAVA.
Polimorfismo subtipado
Programación Orientada a Objetos
Métodos y parámetros.
Polimorfismo y Métodos Virtuales
Manejo de Punteros y objetos en memoria dinámica en C++
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Conceptos básicos de programación
Proyecto de Software. t07
MANEJO DE ARRELOGS EN C Clase 8: Arreglos.
Fundamentos de programación
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Tema 2. Resolución de Problemas
Métodos en Java.
Proyecto de Software. Clase 06
Guía teórica de manejo de estructuras de datos
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
PSEUDOCÓDIGO Prof. Rafael Mourglia.
Introducción a programación web Martin Esses
Programación orientada a objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
TUTORIAL PSeint.
MATEMÁTICA DISCRETA Y LÓGICA 1
Tema 6. Conceptos básicos de programación Clase 1
METODOLOGIA DEL DESARROLLO DE SISTEMAS
GameMaker VIEWS. - Cámaras.
LENGUAJE DE PROGRAMACION III Estructuras Estáticas de Datos
FACTORY METHOD Creación a nivel de clases.
Procedimientos y Funciones
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
ESTRUCTURA DE UN PROGRAMA SIMPLE EN JAVA
Diagramas del modelo uml
Fundamentos de Programación
Especificación de requerimientos por: Sonia Cristina Gamboa Sarmiento
Estructuras de control en PHP
Paul Leger Funciones Paul Leger
Java – programación orientada a objetos programación ii – iee
LENGUAJE C.
Metodología de la Programación
Patrón de diseño: Factory Method
INTRODUCCION Hasta ahora solo hemos tenido que trabajar con algunas variables en cada uno de los programas que hemos realizado. Sin embargo, en más de.
CICLOS EN JAVA FOR, WHILE, DO WHILE Un ciclo en Java o bucle en Java (como prefieras llamarlo) permite repetir una o varias instrucciones cuantas veces.
MC Beatriz Beltrán Martínez Verano 2018
Curso de Programación Estructurada
Nelson Baloian, José A. Pino
Templates (en español: Pantillas, modelos, patrones)‏
String, random y stream en java
PROGRAMACIÓN ORIENTADA A OBJETOS ING. HEMERSON VILLACORTA M.
DESARROLLO DE APLICACIONES WEB INSTRUCTOR: HEMERSON VILLACORTA MANIHUARI.
Manejo de Punteros y objetos en memoria dinámica en C++
CC 1002: Introducción a la Programación Clase 15: Estructuras mutables
Guía teórica de manejo de estructuras de datos
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Prof. Marcos Heredia.  Primitivos y No Primitivos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

CC 1002: Introducción a la Programación Clase 19 Nelson Baloian, José A. Pino

Interacciones entre Objetos Para construir aplicaciones interesantes los objetos pueden combinarse entre sí, Para realizar una tarea común. Consideremos un reloj digital que tiene una pantalla en la cual se muestran las horas y los minutos, separados por dos puntos (:). Así, estos relojes son capaces de mostrar la hora desde las 00:00 (medianoche) hasta las 23:59 (un minuto antes de medianoche).

Abstracción y modularidad En vez de implementar el reloj desarrollando una única clase, vamos a identificar subcomponentes en el problema que se puedan descomponer en clases separadas. La técnica que usaremos es la abstracción: Dividiremos el problema en subproblemas, y luego cada subproblema en sub-subproblemas hasta que los problemas individuales sean lo suficientemente simples como para poder desarrollarlos con una clase sencilla (a esto se le denomina modularidad). Una vez que hayamos resuelto uno de estos subproblemas, no nos preocuparemos más de los detalles de este, sino que consideraremos esta solución como un elemento que podemos reutilizar en el subproblema siguiente.

Abstracción y modularidad Modularidad y abstracción se complementan entre sı. La modularidad es el proceso de dividir problemas grandes en partes más pequeñas, mientras que la abstracción es la habilidad de ignorar detalles para enfocarse en el plano general. En la programación orientada a objetos, estas componentes y subcomponentes son objetos El identificar qué tipo de objetos (y qué clases) se deben incluir en un sistema para un problema dado no siempre es una tarea sencilla.

Reloj digital En vez de 4 dígitos separados por “:” podemos pensar en dos números de dos dígitos cada uno Un par empieza en 0, aumenta en 1 cada hora, y vuelve a 0 cuando alcanza su límite 23. El otro par vuelve a 0 cuando su valor alcanza el límite 59 El reloj esta formado por dos objetos que pueden mostrar valores enteros que comienzan en 0 hasta cierto límite, cuando se reinicia a 0 Entonces, primero implementaremos una clase para manejar un par de números, luego darle un método para obtener su valor, y dos métodos para asignar un valor y aumentarlo. Una vez que hayamos definido esta clase, bastara con crear dos objetos de esta clase (cada cual con su límite) para el reloj completo.

Diagramas de clases y objetos Queremos primero construir una representación para un par de números que almacene dos valores: lımite y el valor actual. Representemos los valores como enteros en la clase ParDeNumeros: Y como dijimos, la clase Reloj tendrá dos ParDeNumeros:

Un Diagrama La estructura de objetos descrita puede visualizarse usando el siguiente diagrama de objetos. En este diagrama apreciamos que un objeto de la clase Reloj se instancia utilizando dos objetos de la clase ParDeNumeros.

El Diagrama de clases La estructura de objetos descrita puede visualizarse usando el siguiente diagrama de objetos. En este diagrama apreciamos que un objeto de la clase Reloj se instancia utilizando dos objetos de la clase ParDeNumeros.

Implementación ParDeNumeros (1) # Campos : # limite : int # valor : int class ParDeNumeros : # Constructor : crea un objeto que almacena # dos números y se reinicia # a cero cuando se sobrepasa el limite def __init__ (self , limite ): self . limite = limite self . valor = 0 # getValor : None -> int # Retorna el valor actual def getValor ( self ): return self . valor

Implementación ParDeNumeros (2) # setValor : int -> None # efecto : Reemplaza el valor del par por nuevo valor def setValor (self , nuevoValor ): if(nuevoValor>=0) and ( nuevoValor<self.limite): self . valor = nuevoValor # toString : -> str # Retorna el valor almacenado en un string que # contiene los numeros del par; si el valor es menor # que diez , se le debe anteponer un cero def toString ( self ): if self . valor < 10: return "0" + str ( self . valor ) else : return str( self . valor )

Implementación ParDeNumeros (3) # aumentar : None -> None # efecto : Aumenta en una unidad el valor almacenado # en el par , # reiniciando a cero si se sobrepasa el limite def aumentar ( self ): self . valor = ( self . valor + 1) % self . limite

Implementación Reloj (1) # aumentar : None -> None # Campos : # horas : ParDeNumeros # minutos : ParDeNumeros # pantalla : str class Reloj : # Constructor : crea un objeto reloj . # Si no recibe parametros , inicia el reloj # a las 00:00; si recibe , a la hora indicada def init (self , horas =0, minutos =0): self . horas = ParDeNumeros (24) self . minutos = ParDeNumeros (60) self . setReloj (horas , minutos )

Implementación Reloj (2) # tic: None -> None # Se llama cada minuto,hace avanzar el reloj un minuto def tic ( self ): self . minutos . aumentar () if self . minutos . getValor () == 0: self . horas . aumentar () self . actualizarPantalla () # setReloj : int int -> None # efecto : Fija la hora y minuto a los especificados def setReloj (self , hora , minuto ): self . horas . setValor ( hora ) self . minutos . setValor ( minuto )

Implementación Reloj (3) # tic: None -> None # getHora : None -> str # Devuelve la hora actual del reloj en formato HH:MM def getHora ( self ): return self . pantalla # actualizarPantalla : None -> None # efecto : Actualiza el string interno que lleva # cuenta de la hora actual def actualizarPantalla ( self ): self . pantalla = self . Horas . toString () + \ ":” + self . minutos . toString ()

Objetos que crean objetos ¿de dónde salen estos tres objetos? Al crear un objeto Reloj en el constructor se ejecutan dos instrucciones que crean objetos de la clase ParDeNumeros class Reloj : # Constructor : crea un objeto reloj . # Si no recibe parametros , inicia el reloj # a las 00:00; si recibe , a la hora indicada def __init__ (self , horas =0, minutos =0): self . horas = ParDeNumeros (24) self . minutos = ParDeNumeros (60) self . setReloj (horas , minutos )

Constructores Como ya hemos visto, la sintaxis para crear un nuevo objeto es: NombreDeClase(lista-de-par´ametros) La construcción de un objeto hace dos cosas: 1. Crea un nuevo objeto de la clase llamada (en este caso Reloj) 2. Ejecuta el constructor de la clase Si el constructor de la clase está definido para tener parámetros, entonces deben ser suministrados al crear el objeto. Por ejemplo, el constructor de la clase ParDeNumeros fue definido para esperar un parámetro del tipo entero:

Llamadas a Métodos internos La ultima lınea del método tic de la clase Reloj contiene la siguiente declaración: self.actualizarPantalla () Esta declaración es una llamada a un método. Como hemos visto hasta el momento, la clase Reloj tiene un método con la siguiente firma: def actualizarPantalla ( self ): La llamada de arriba invoca a este método. Ya que este método est´a en la misma clase que la llamada al método (en tic), también la denominamos llamada de método interna. Este tipo de llamadas tienen la siguiente sintaxis: self.nombreDelMetodo ( lista -de - parametros ) En nuestro ejemplo, el método no tienen ningún parámetro, así que la lista de parámetros esta vacía ()

Llamadas a Métodos externos Examinemos el siguiente método en tic: self . minutos . aumentar () Esta declaración llama al método aumentar del objeto minutos. Luego, cuando uno de los métodos del objeto Reloj es llamado, a su vez él llama a un método de otro objeto para hacer parte del trabajo. Una llamada a un método de otro objeto se denomina llamada de método externa. La sintaxis de una llamada de este tipo esta dada por: objeto . nombreDeMetodo ( lista -de - parametros ) Esta notación es conocida como notación de punto. Consiste en el nombre de un objeto, un punto, el nombre del método a llamar, y los parámetros de la llamada. Es particularmente importante apreciar que aquí hablamos del nombre de un objeto y no del nombre de la clase: Usamos el nombre minutos en vez de ParDeNumeros.

Testing de clases La prueba de programas orientados al objeto es más compleja que probar programas funcionales: los objetos contienen variables de estado mutables y los métodos de un objetos se usan en combinación. Por estas dos razones, un test usualmente necesita definir un escenario de prueba más largo que una simple llamada a una función. Ahora presentamos una primera manera de probar clases sencillas; La idea es que cada clase de un programa pueden tener una clase de prueba que se encarga de: crear objetos de la clase a probar, y poner estos objetos en estados que queremos probar; ejercitar la funcionalidad de dichos objetos con varias secuencias de m´etodos; y verificar que el comportamiento es correcto.

Testing para ParDeNumeros

Testing para Reloj