Clases (construcción)

Documentos relacionados
Clases (construcción)

A3F. Objetos (uso) Carlos Fontela

Carlos Fontela

Reutilización con delegación, herencia y polimorfismo

Reutilización con Delegación y Herencia

Reutilización con Delegación y Herencia

A3F. Objetos (uso) Carlos Fontela

Híper introducción a Objetos

POO en lenguajes compilados de tipos estáticos (Java y C#)

Planificaciones Algoritmos y Programación III. Docente responsable: FONTELA MOISES CARLOS. 1 de 8

A3F. Polimorfismo. Carlos Fontela

A3F. Polimorfismo. Carlos Fontela

Excepciones UML Cuestiones conceptuales

Programación orientada a objetos

Tema 1.- Conceptos básicos de la OO

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Programación Orientada a Objetos. Conceptos Básicos

acceso Implementación de conceptos P.O.O. en Java Orientada a Objetos 2. Modificadores de en Java Temario

Unified modeling language

Programación Orientada a Objetos. Integrantes: Santiago Hernández Bolívar Edwin Alexander Bohórquez

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

Introducción a la Orientación a Objetos

Tecnología de la Programación

RTTI y reflexión A3F. Carlos

Encapsulamiento, polimorfismo, abstracción y herencia

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos 1

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño variable y uso de ciclos en otros contextos

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

Introducción código transversal

Abstracción. Encapsulamiento. Polimorfismo. Objeto. método / objeto / clase / módulo. Separación de las propiedades de un

UNIDAD 4 IMPLEMENTACION DE PROPIEDADES DE LOS OBJETOS JAVA

Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación.

PNFSI. Asignatura: Desarrollo de Software. Tema 1: Programación Orientada a Objetos

Applying UML and Patterns Capítulos 18, 19, 20 y 21

Programación Orientada a Objetos en Java

A3F. Diseño MVC. Carlos Fontela

Objetivos. Objetivos. Herencia. Objetivos. agregar funcionalidad a una clase existente, sin compilar su nueva definición.

Implementando TADs en Python

Docente/s. R/I Apellido y Nombres Departamento/División R/I Apellido y Nombres Departamento/División

UNIVERSIDAD AUTÓNOMA DE CHIAPAS LICENCIATURA EN SISTEMAS COMPUTACIONALES

Tema 2. Principios del Diseño Orientado a Objetos

1. Conceptos básicos de POO 1

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

Herencia. Implementación en Java

Paradigmas de Programación

Análisis y Programación Orientada a Objetos

Guía práctica de estudio 08: Polimorfismo

Programación orientada a objetos I

Desarrollador de Aplicaciones Web con Java

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

PROGRAMACION ORIENTADA A OBJETOS EN C++

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

UD 1 INTRODUCCIÓN AL PARADIGMA ORIENTADO A OBJETOS

Programación Orientada a Objetos (POO)

Lenguajes de Programación I

Adoptando el Paradigma de la Programación Orientada a Atributos

UML: Diagrama de Clases

Curso de Java POO: Programación orientada a objetos

POO. Por tanto, una clase nos permite crear varios objetos que pueden realizar la misma función o funciones diferentes.

obtenidos a partir de los objetos que manipula. un nuevo paradigma de programación, La POO es Clases su forma de módulo.

Lenguajes y Paradigmas de Programación. Programación Orientada a Objetos y Scheme

Cada enfoque tiene sus ventajas y desventajas Cada uno es más apropiado para ciertas cosas

Programación Orientada a Objetos

Tema 5. Herencia. Departamento de Lenguajes y Sistemas Informáticos Universidad de Granada

MASTER EN MODELIZACIÓN MATEMÁTICA, ESTADÍSTICA Y COMPUTACIÓN Curso: Bases de datos y programación orientada a objetos Parte POO.

PHP orientado a objetos:

Tema: Funciones Virtuales y Polimorfismo.

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

Curso de PHP. Pascual Gómez del Pino Página 1

Introducción a la Programación Orientada a Objetos (POO)

Programación orientada a objetos. Introducción

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA

ALGORITMICA Y PROGRAMACION POR OBJETOS I

PROGRAMACIÓN ORIENTADA A OBJETOS

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Metodologías en la Ingeniería del Software Métodos Orientados a Objetos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

CAPÍTULO 2: CARACTERÍSTICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS. ABSTRACCIÓN. ENCAPSULAMIENTO. PRINCIPIO DE OCULTACIÓN. HERENCIA. POLIMORFISMO.

UNIVERSIDAD AUTONOMA DE QUERETARO Facultad de Informática

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

4.1 - OBJETOS Y CLASES

CLASE 9 -HERENCIA Y POLIMORFISMO

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

Desarrollo Orientado a Objetos basado en UML

Programación Orientada a Objetos Clases, métodos, atributos. Concepto de herencia, clases derivadas, tipos de herencia.

Programación Orientada a Objetos GUÍA DOCENTE Curso

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Capítulo 16. Diagrama de Clases UML

TEMA 1 INTRODUCCIÓN AL PARADIGMA ORIENTADO A OBJETOS

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Modelo Académico de Calidad para la Competitividad PROO-02 13/21

PROGRAMA DE CURSO. Horas de Trabajo Personal Horas de Cátedra

Programación Orientada a Objetos y Patrón MVC en PHP5. Pablo Ramirez A.

Aplicaciones de Escritorio

Capítulos 2 y 5: Modelación con UML y Modelo Objeto

Programación Orientada a Objetos GUÍA DOCENTE Curso

Transcripción:

Clases (construcción) Carlos Fontela cfontela@fi.uba.ar

Temario Implementación de clases Atributos Métodos y propiedades Constructores Excepciones Diseño contractual TDD o diseño guiado por las pruebas 2c2009 2

Dijimos POO parte de las entidades del dominio del problema Que son objetos con comportamiento Cómo? => Implementando clases 2c2009 3

Implementación de clases (1) Clase = tipo definido por el programador No los llamamos abstractos : en POO eso es otra cosa Ampliar el lenguaje Se definen estructura y operaciones Ocultamiento: cliente necesita conocer interfaz No necesita conocer aspectos internos (implementación) Riesgos de la falta de ocultamiento Impedir evolución 2c2009 4 Violación de restricciones

Implementación de clases (2) En UML: Lo que se indica con (-) está oculto: es privado de cada objeto Lo que se indica con (+) lo pueden usar los clientes: es público 2c2009 5

Implementación de clases: cómo? Varios caminos de diseño Modelo contractual Desarrollo guiado por las pruebas Son complementarios y no excluyentes 2c2009 6

Modelo contractual (1) Una clase es provista por un proveedor a un cliente en base a un contrato Bertrand Meyer y diseño por contrato 2c2009 7

Modelo contractual (2) El contrato se evidencia por Firmas de métodos y propiedades Precondiciones de métodos y propiedades Postcondiciones de métodos y propiedades Incluyendo resultados obtenidos Incluyendo casos de excepción Invariantes de la clase Restricciones que siempre cumplen todas las instancias 2c2009 8

Cuenta bancaria: firmas de métodos Constructor: (para crear e inicializar) => ver luego CuentaBancaria inicializarconnumero: numero contitular: titular Métodos (y propiedades): cuenta depositar: monto cuenta extraer: monto cuenta getsaldo cuenta gettitular cuenta getnumero Ojo que en Smalltalk no se definen los tipos 2c2009 9

Cuenta bancaria: atributos Son variables internas de cada objeto, que sirven para mantener el estado de los mismos Para una cuenta bancaria: Ojo que en Smalltalk no se define el tipo antes de usarlos Podría haber más, que descubramos más adelante 2c2009 10

Cuenta bancaria: precondiciones CuentaBancaria inicializarconnumero: numero contitular: titular Precondición 1: titular no debe valer nil ni referenciar una cadena vacía Precondición 2: numero > 0 cuenta depositar: monto Precondición 1: cuenta no debe valer nil (debe referenciar un objeto) Precondición 2: monto > 0 Tarea: definir precondiciones para los otros métodos 2c2009 11

Cuenta bancaria: postcondiciones CuentaBancaria inicializarnumero: numero titular: titular Postcondición 1: se creó un objeto de la clase CuentaBancaria, con el número y el titular indicados Postcondición 2 (alternativa): si titular es nil o referencia una cadena vacía, se arroja una excepción de tipo Error cuenta depositar: monto Postcondición 1: el saldo de la cuenta aumentó en el valor del monto Postcondición 2 (alternativa): si monto < 0, se arroja una excepción de tipo Error 2c2009 12

Cuenta bancaria: invariantes Son las restricciones en los valores de los atributos, válidas para todas las instancias Son postcondiciones de todos los métodos, incluyendo el constructor Corolario: el constructor debe dejar a la instancia creada en un estado válido Invariantes de CuentaBancaria: saldo >= 0 titular <> nil titular <> numero > 0 2c2009 13

Implementación de la clase (1) Object subclass: # CuentaBancaria instancevariablenames: numero titular saldo classvariablenames: pooldictionaries: category: nil! 2c2009 14

Implementación de la clase (2)! CuentaBancaria methodsfor: consulta! getsaldo ^saldo! gettitular ^titular! getnumero ^numero!! 2c2009 15

Implementación de la clase (3)! CuentaBancaria methodsfor: operaciones! depositar: monto ( monto < 0 ) iftrue: [ Error new signal. ]. saldo := saldo + monto! extraer: monto ( monto > saldo ) iftrue: [Error new signal. ]. saldo = saldo - monto!! 2c2009 16

Implementación de la clase (4)! CuentaBancaria methodsfor: inicializar! CuentaBancaria inicializarnumero: n titular: t (numero <= 0 titular = nil titular = ) iftrue: [Error new signal ]. cuentanueva cuentanueva := CuentaBancaria new. cuentanueva numero := n.!! cuentanueva titular := t. cuentanueva saldo := 0; ^ cuentanueva. 2c2009 17

Objeto self Referencia self depositar: monto ( monto < 0 ) iftrue: [ Error new signal. ]. self saldo := self saldo + monto! Invocación con el objeto actual cuenta depositar: 2000. self referencia al objeto actual 2c2009 18

Modelo contractual en la práctica Precondiciones Si no se cumplen, lanzamos una excepción Postcondiciones Si no se cumplen, podríamos lanzar una excepción Pero la prueba unitaria es un mejor camino Veremos más adelante Invariantes Son postcondiciones permanentes 2c2009 19

Excepciones: lanzamiento Las excepciones son objetos Se crean y se lanzan hacia el módulo invocante Sintaxis: ClaseException new signal. ClaseException new signal: un texto. Ya vimos cómo capturarlas El texto lo obtenemos con el método messagetext Veremos formalmente excepciones más adelante 2c2009 20

Los objetos deben saber cómo comportarse Ya lo dijimos: Diferencia más importante con programación estructurada Corolarios: Deben manejar su propio comportamiento No debemos manipular sus detalles desde afuera En vez de: cuenta setsaldo: [ cuenta getsaldo + monto ]. Hacemos: cuenta depositar: monto. 2c2009 21

Encapsulamiento Alan Kay, creador de Smalltalk, y del término Programación Orientada a Objetos se basó en sus conocimientos de bacterias La membrana de una bacteria nos aísla de la complejidad interna La bacteria interactúa con el mundo a través de su interfaz Respondiendo a estímulos Realizando acciones 2c2009 22

Constructores o inicializadores No existen en Smalltalk: sólo está el método de clase new Debería dejar al objeto en un estado válido => debe cumplir con los invariantes El new no es seguro Hay un método initialize, que se puede redefinir Nos falta ver herencia para entenderlo De todas maneras, no tiene parámetros Tampoco es seguro Por eso definimos el método: CuentaBancaria inicializarnumero: n titular: t Se invoca cuenta := CuentaBancaria new inicializarnumero: 1234 titular: Juan 2c2009 23

Visibilidad Importante para garantizar ocultamiento de implementación Atributos, propiedades y métodos privados Sólo se pueden usar desde dentro de la clase en que están definidos Atributos, propiedades y métodos públicos Se los puede usar desde cualquier lado Smalltalk Todos los métodos son públicos Todos los atributos son protegidos (semi-privados) Veremos luego 2c2009 24

Diseño guiado por pruebas Test-Driven Development = Test-First + automatización + refactorización Test-First: Escribir código de pruebas antes del código productivo Automatización: Las pruebas deben expresarse como código, que pueda indicar si todo sale bien de manera simple y directa El conjunto de pruebas debe poder ir creciendo Las pruebas deben correrse por cada cambio Refactorización: mejora de calidad del diseño sin cambio de funcionalidad 2c2009 25

TDD: frameworks de pruebas automatizadas Ejemplo de CuentaBancaria con SUnit Llegamos a la misma clase En Java existe JUnit En.NET, NUnit Muy importantes en refactorización Los van a ver en la práctica 2c2009 26

Cómo implementamos las clases? Ayudarse por los dos caminos Modelo contractual TDD Pruebas automatizadas sirven para TDD Invariantes y postcondiciones del modelo contractual Otra herramienta: aserciones en el modelo contractual Es redundante y preferimos las otras 2c2009 27

Procedimient o 2c2009 28

Atributos y propiedades: ojo con las apariencias No todos los atributos tienen getters y setters Sólo los necesarios Hay propiedades que no corresponden a atributos unstring size => tiene que haber un atributo? numerocomplejo getmodulo => propiedad calculable Noción: ( propiedad = atributo conceptual ) => Los atributos conceptuales deberían estar implementados como propiedades 2c2009 29

Atributos de clase Supongamos que necesitamos que el número de cuenta fuera incremental Solución: Agregar un atributo numeroacumulado que mantenga un único valor para la clase Eso es un atributo de clase En Smalltalk de clase se declaran en classvariablenames classvariablenames: numeroacumulado Ejercicio: cambiar CuentaBancaria para que número de cuenta sea incremental 2c2009 30

Smalltalk: todo son objetos y mensajes No hay variables que no referencien objetos Las clases son objetos Los métodos son objetos Las estructuras de control son métodos => Modelo de objetos puro Sólo objetos y mensajes 2c2009 31

Claves Clases se implementan en base a un modelo cliente-proveedor Las clases son tipos definidos por el programador Que representan entidades del dominio del problema Diseño con dos modelos Contratos TDD Las pruebas deben ser automatizadas 2c2009 32

Lecturas opcionales Object-Oriented Software Construction, Bertrand Meyer Está en la biblioteca Especialmente capítulos 7, 8, 11 y 12 Test Driven Development: By Example, Kent Beck No está en la Web ni en biblioteca Code Complete, Steve McConnell, Capítulo 6: Working Classes No está en la Web ni en biblioteca Implementation Patterns, Kent Beck, Capítulos 3 y 4: A Theory of Programming y Motivation No está en la Web ni en biblioteca Orientación a objetos, diseño y programación, Carlos Fontela 2008, capítulo 4 Construcción de clases 2c2009 33

Qué sigue Delegación, herencia Polimorfismo, construcción de excepciones POO en Java y C# 2c2009 34