INACAP Universidad Tecnológica de Chile Sede Santiago Centro Taller de Programación I Curso Java J2SE Tema 05: Programación Orientada a Objetos en Java 01 Ing. Manuel López Ramos (versión 2)
Parte I Conceptos Básicos de Orientación a Objetos
Conceptos de Orientación a Objetos La orientación a objetos es una forma de análisis y diseño de software que permite desarrollar software más complejo, pero en menor tiempo y de una forma organizada y más racional. Los conceptos básicos a desarrollar son los siguientes: Objeto (entidad, concepto o idea) Atributo (características de un objeto) Método (acciones que puede realizar un objeto) Clase Instancia de clase Paso de mensajes Herencia Polimorfismo
Conceptos de Orientación a Objetos Objeto: cualquier entidad, concepto o idea que es importante para la definición de un problema y que posee características y acciones asociadas al problema en cuestión.. Perro Dígito Avión Edificio Árbol Link
Conceptos de Orientación a Objetos Atributo: corresponde a una característica de un objeto, importante para la definición del problema, y que puede tomar un valor desde un conjunto finito de valores. Lista de atributos: raza -> String -> "Bulldog" nombre -> String -> "Rex" color -> String, int o float -> "café" tamaño -> String o char -> "Pequeño" altura -> float o double -> 10.50 sexo -> char -> 'M' Lista de atributos: tipo -> String -> "Decimal" nombre -> String -> "Uno" valor -> byte -> 1 trazos -> byte -> 2
Conceptos de Orientación a Objetos Método:acciones relevantes al problema a tratar, que puede realizar un objeto de forma propia o que otro objeto puede realizar sobre el primero. acciones del objeto ladrar() darlenombre(nombre:string) Objeto Perro obtenerpeso():float Clase: conjunto infinito de objetos que comparten las mismas características (atributos) y acciones (métodos) entre sí. Sin embargo, el valor de los atributos no tienen necesariamente los mismos valores. Clase Perro Clase FiguraGeometrica
Conceptos de Orientación a Objetos Instancia de clase: objeto creado a partir de una clase, cuyos atributos tienen un valor determinado a partir de su conjunto de valores asociado. FiguraGeometrica: triangulo01 nombre = "Triángulo" color = "Celeste" area = 34.1894 numlados = 3 esregular = false Clase FiguraGeometrica FiguraGeometrica: circulo02 nombre = "Círculo" color = "Verde" area = 562.91 numlados = 0 esregular = true
Conceptos de Orientación a Objetos Paso de mensajes: es un mecanismo invisible que permite que el programa le pida a una instancia de clase que ejecute una de sus acciones asociadas. Instancia de Perro (Rex01) Ejecute el método ladrar()! Mensaje en Java: Rex01.ladrar()
Conceptos de Orientación a Objetos Herencia: es un mecanismo por el cual todos los objetos de una clase adoptan automáticamente todos los atributos y métodos de otra clase (pero no sus valores). Es una forma de extender el funcionamiento de los objetos a partir del comportamiento de otras clases ya creadas. Perro Deportista Perro de Asistencia Perro Perro Artista
Conceptos de Orientación a Objetos Polimorfismo: es un mecanismo que permite que un método sea aplicado sobre objetos de diferentes clases, cada uno de ellos respondiendo de forma diferente a la misma acción aplicada. Objeto Helicóptero Mensaje en Java: volar() Objeto Avión Objeto Superman
Parte II Diagrama de clases de UML
Diagrama de clases de UML Los conceptos anteriores pueden diagramarse, utilizando un tipo de lenguaje de modelado, conocido como UML (Unified Modeling Language). A continuación, se muestra la forma en la que se aplican los conceptos sobre un tipo de diagramas de UML, denominado diagrama de clases. Clases: las clases se grafican utilizando un rectángulo con 3 áreas: nombre de la clase lista de atributos lista de métodos
Diagrama de clases de UML (continuación) Algunas cosas a considerar: 1) Nombre de la clase: debe escribirse, en general, utilizando notación "camello" (cada palabra comienza por mayúscula inicial). Además, el nombre debe escribirse en singular. 2) Visibilidad: este concepto indica los lugares de la aplicación desde donde podrá llamarse y utilizarse una determinada variable o función. Los tipos de visibilidad definidos en UML (y en Java) son los siguientes: Tipos de acceso: público (signo +) privado (signo -) protegido (signo #) por omisión (sin signo) Tipo de datos: char, byte, short, int, long, float, double, String, etc.
Diagrama de clases de UML (continuación) 3) Atributos de la clase: en Java, se escriben con notación "camello", pero con minúscula inicial (por ejemplo: cantidadpersonas, tipocolor, etc.) Además, se acompañan con dos elementos adicionales: el tipo de acceso al atributo y el tipo de datos que aceptará. Ejemplos de atributos: nombre: String edad: byte altura: float esadulto: boolean
Diagrama de clases de UML (continuación) 4) Métodos de la clase: en Java, se escriben con notación "camello", pero con minúscula inicial (por ejemplo: obteneredad, pintar, incrementar, etc.) Además, se acompañan con tres elementos adicionales: el tipo de acceso al atributo, los parámetros de entrada (si los tuviera) y el tipo de datos que retornará (en el caso de que se trate de una función; si es sólo un procedimiento, no se especifica ninguno). Si el método además se subraya, se tratará de un método estático (definido con la palabra clave static; más sobre este tema en un capítulo posterior). Por ejemplo: pintar() obteneredad(): byte definircolor(color: String) eshumano(ser: SerVivo): boolean
Diagrama de clases de UML (continuación) Los métodos son equivalentes a las subrutinas de otros lenguajes (procedimientos y subrutinas). Por ejemplo: a) pintar() pintar() (void) b) obteneredad(): byte c) definircolor(color: String) String (color) obteneredad() definircolor() byte (void) d) eshumano(ser: SerVivo): boolean SerVivo (ser) eshumano() boolean MÉTODOS (O SUBRUTINAS)
Diagrama de clases de UML (continuación) Sintaxis general de atributos en UML: <nombreatributo>: <tipodato> Sintaxis general de métodos en UML: <nombremetodo> (<parámetros_opcionales>): <tiporetorno>
Resumen De forma general, una clase puede anotarse como se muestra a continuación: atributos públicos (+), privados (-) y protegidos (#) con su tipo de datos métodos públicos (+), privados (-) y protegidos (#) con o sin tipo de dato de retorno con o sin parámetros método estático
Parte III Cardinalidad de relaciones
Relaciones entre clases Relaciones: las clases no viven solas dentro de una aplicación, sino que más bien se vinculan a otras clases a través del significado, del trabajo conjunto o de la dependencia jerárquica. El vínculo entre dos clases se conoce con el nombre de relación entre clases y se grafica con una línea recta entre ambas clases participantes. Las relaciones tienen un nombre, que indica cómo se vinculan o trabajan ambas clases entre sí; también tienen una dirección de uso (unidireccionales o bidireccionales). Por ejemplo: (relación bidireccional) (relación unidireccional)
Relaciones entre clases (continuación) Cuando hay dos o más clases se pueden verificar más relaciones entre ellas. Por ejemplo: (relación reflexiva)
Relaciones entre clases (continuación) Cardinalidad: en las relaciones no siempre participa sólo una instancia de cada clase; en realidad, las instancias pueden participar en diferentes cantidades. Estas cantidades se denominan como la cardinalidad de la relación y se indican en el diagrama de clases utilizando números o símbolos a ambos lados de la línea que conecta las clases. Existen diferentes notaciones para la cardinalidad. Estas son: Símbolo 1 N 0..1 0..* * Cardinalidad uno 'N' objetos cero o uno cero o muchos 1..* uno o muchos
Relaciones entre clases (continuación) Ejemplos de cardinalidad aplicada a las relaciones: 1) un hombre es padre de cero o más niños 2) una mujer es madre de cero o más niños 3) un hombre se casa con una mujer 1) un directorio guarda cero o más archivos 2) un directorio está dentro de cero o un directorio 1) una molécula está formada por 1 ó más átomos 2) un átomo está formado por 1 ó más partículas