Guía práctica de estudio 04: Tipos de clase

Documentos relacionados
Guía práctica de estudio 04: Clases y objetos

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

Guía práctica de estudio 08: Polimorfismo

Guía práctica de estudio 07: Herencia

Guía práctica de estudio 05: Estructuras de selección

Guía práctica de estudio 06: Estructuras de repetición

12. Tipos de atributos

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

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

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

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

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Herencia. Implementación en Java

Guía práctica de estudio 12: Hilos

Programación Orientada a Objetos en C++

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

Tema 6: Clases. Índice

Clases y Objetos en C++

UNIDAD 4 IMPLEMENTACION DE PROPIEDADES DE LOS OBJETOS JAVA

PROGRAMACION ORIENTADA A OBJETOS EN C++

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

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

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

Programación orientada a objetos I

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) }

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez

Universidad Nacional del Santa E.A.P. Sistemas e Informática Microcomputación III

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Edwin Andrés Cubillos Vega

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 + +.

Cómo se estructura un programa en C#? Qué son las clases y los objetos? Cómo se estructuran los dibujos de AutoCAD?

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

Curso de Java POO: Programación orientada a objetos

PROGRAMACION ORIENTADA A OBJETOS: Tema 2. Conceptos básicos de la Programación Orientada a Objetos

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

RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA

CONCEPTOS BÁSICOS PROGRAMACIÓN ORIENTADA A OBJETOS. Ing. Martha Tello

Introducción a la Programación Orientada a Objetos

FACULTAD DE INGENIERÍA

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas

Curso de Java POO: Programación orientada a objetos

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

Guía práctica de estudio 10: Excepciones y errores

Programación orientada a objetos II

Unidad 2. Elementos Intermedios del Lenguaje

POO: Clases y objetos

Principios de Computadoras II

Modulo 11. Clases y Objetos en Java

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

Guía práctica de estudio 05: Pseudocódigo

CLASE 9 -HERENCIA Y POLIMORFISMO

Aplicaciones de Escritorio

Guía práctica de estudio 05: Abstracción y Encapsulamiento

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

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Clases y herencia. FJP Unidad 8. Diseño de clases

Declaración de una clase

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

Clases y métodos parciales (Guía de programación de C#)

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

U.A.B.C. Facultad de Ingeniería Programación Estructurada UNIDAD III

Una función es un miniprograma dentro de un programa. Las funciones contienen varias

Programación orientada a objetos. Introducción

18. Interfaces Declaración de una interfaz

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

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

PROGRAMACIÓN ORIENTADA A OBJETOS

Examen Teórico. Convocatoria de Febrero de 2015

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

SUBPROGRAMAS. Los subprogramas pueden ser invocados varias veces desde diferentes partes del programa.

Herencia y Polimorfismo

UML: Diagrama de Clases

Introducción a Java. Introducción a Java. Programación I

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Practica #3: Uso de Clases y Métodos

Guía práctica de estudio 09: UML

Tema 3b: Estructura General de un programa en Java

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

Práctica #3: Uso de Clases y Métodos

Programación n de sistemas

Programación Dirigida a Objetos. MATERIAL COMPLEMENTARIO Tema 5.- Herencia

Contenido. 1 Qué es un diagrama de clase? 2 Elementos de un diagrama de clase. 3 Clase, atributo, método y visibilidad. 4 Agregación y composición

Estructura de datos y Programación

Métodos. CI-1101, Programación I Prof. Braulio Solano Rojas

Los Constructores(1)

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

INTRODUCCIÓN A LA POO EN C++

Java. Introducción a la Programación Orientada a Objetos

Fundamentos de la POO 1

Federico Peinado

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Transcripción:

Guía práctica de estudio 04: Tipos de clase Elaborado por: M.C. M. Angélica Nakayama C. Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena

Guía práctica de estudio 04: Tipos de clases Objetivo: Implementar diferentes tipos de clases en un lenguaje de programación orientado a objetos. Introducción La programación orientada a objetos se basa en el hecho de que se debe dividir el programa, no en tareas, si no en modelos de objetos físicos o simulados. Si se escribe un programa en un lenguaje orientado a objetos, se está creando un modelo de alguna parte del mundo, es decir, se expresa un programa como un conjunto de objetos que colaboran entre ellos para realizar tareas. Un objeto es, por tanto, la representación en un programa de un concepto, y contiene toda la información necesaria para abstraerlo: datos que describen sus atributos y operaciones que pueden realizarse sobre los mismos. Los objetos pueden agruparse en categorías y una clase describe (de un modo abstracto) todos los objetos de un tipo o categoría determinada. NOTA: En esta guía se tomará como caso de estudio el lenguaje de programación JAVA, sin embargo, queda a criterio del profesor el uso de éste u otro lenguaje orientado a objetos. 1

Objeto La idea fundamental de la programación orientada a objetos y de los lenguajes que implementan este paradigma de programación es combinar (encapsular) en una única unidad tanto los datos como las funciones que operan (manipulan) sobre los datos. Esta unidad de programación se denomina objeto. Entonces, un objeto es una encapsulación genérica de datos y de los procedimientos para manipularlos. En otras palabras, un objeto no es más que un conjunto de atributos (variables o datos) y métodos (o funciones) relacionados entre sí. Figura 1. Conceptualización de un objeto en POO. El objeto es el centro de la programación orientada a objetos. Un objeto es algo que se visualiza, se utiliza y que juega un papel o un rol en el dominio del problema del programa. La estructura interna y el comportamiento de un objeto, en consecuencia, no es prioritario durante el modelado del problema. Clase En el mundo real existen varios objetos de un mismo tipo, o de una misma clase, por lo que una clase equivale a la generalización de un tipo específico de objetos. Una clase es una plantilla que define las variables y los métodos que son comunes para todos los objetos de un cierto tipo. Una clase es la implementación de un tipo abstracto de datos y describe no solo los atributos (datos) de un objeto sino también sus operaciones (comportamiento). En Java para definir una clase se utiliza la palabra reservada class seguida del nombre de la clase. class NombreDeLaClase 2

En UML una clase se representa de manera gráfica con 3 rectángulos dispuestos de manera vertical uno debajo de otro. En el primero se anota el nombre de la clase, en el segundo los atributos y en el tercero las operaciones, es decir: Instancia Figura 2. Diagrama de clase en UML. Una vez definida la clase se pueden crear objetos a partir de ésta, a este proceso se le conoce como crear instancias de una clase o instanciar una clase. En este momento el sistema reserva suficiente memoria para el objeto con todos sus atributos. Una instancia es un elemento de una clase (un objeto). Cada uno de los objetos o instancias tiene su propia copia de las variables definidas en la clase de la cual son instanciados y comparten la misma implementación de los métodos. Sin embargo, cada objeto asigna valores a sus atributos y es totalmente independiente de los demás. En Java para crear una instancia se utiliza el operador new seguido del nombre de la clase y un par de paréntesis. Mensajes new NombreDeLaClase( ); Normalmente un único objeto por sí solo no es muy útil. Los objetos interactúan enviándose mensajes unos a otros. Tras la recepción de un mensaje el objeto actuará. La acción puede ser el envío de otros mensajes, el cambio de su estado, o la ejecución de cualquier otra tarea que se requiera que haga el objeto. Los objetos de un programa interactúan y se comunican entre ellos por medio de mensajes. Cuando un objeto A quiere que otro objeto B ejecute uno de sus métodos, el objeto A manda un mensaje al objeto B. 3

Figura 2. Mensajes entre objetos. En ocasiones, el objeto que recibe el mensaje necesita más información para saber exactamente lo que tiene que hacer. Esta información se pasa junto con el mensaje en forma de parámetro. En Java para que un objeto ejecute algún método se utiliza el operador punto: Métodos objeto.nombredelmetodo( parametros ); Los métodos especifican el comportamiento de la clase y sus instancias. En el momento de la declaración hay que indicar cuál es el tipo del parámetro que devolverá el método o void en caso de que no devuelva nada. También se debe especificar el tipo y nombre de cada uno de los parámetros o argumentos del método entre paréntesis. Si un método no tiene parámetros el paréntesis queda vacío (no es necesario escribir void). Los parámetros de los métodos son variables locales a los métodos y existen sólo en el interior de estos. Los argumentos pueden tener el mismo nombre que los atributos de la clase, de ser así, los argumentos ocultan a los atributos. Para acceder a los atributos en caso de ocultación se referencian a partir del objeto actual this. En Java se declara un método de manera similar a las funciones en C: tipodato nombredelmetodo( tipodato parametro1, tipodato parametro2, ) Ejemplo: Se crea una clase Punto para representar un punto en el espacio 2D, cuyos atributos sean las coordenadas (x, y) y contiene un método que imprima los valores de dicha coordenada del punto. 4

Posteriormente se crea una clase de prueba para interactuar con la clase Punto. Dentro de esta clase se tiene un método main y se crean 2 instancias de la clase Punto. Una vez creadas se da valor a sus atributos y se manda ejecutar su método. Sobrecarga de métodos (overload) La sobrecarga de métodos permite usar el mismo nombre de un método en una clase, pero con diferentes argumentos (y, opcionalmente, con diferentes valores de retorno). Los métodos sobrecargados hacen más cómoda la implementación de un objeto y, por ende, la utilización de los métodos del mismo. Los métodos sobrecargados: Deben tener el mismo nombre. Deben cambiar la lista de argumentos. Pueden cambiar el valor de retorno. Pueden cambiar el nivel de acceso. Java permite métodos sobrecargados (overloaded), es decir, métodos distintos que tienen el mismo nombre, pero que se diferencian por el número y/o tipo de los argumentos. Por ejemplo: public void imprimepunto( ) public void imprimepunto(int x, int y) public void imprimepunto(float r, float th) 5

A la hora de llamar a un método sobrecargado, Java sigue algunas reglas para determinar el método concreto que debe llamar: Si existe el método cuyos argumentos se ajustan exactamente al tipo de los argumentos de la llamada (argumentos actuales), se llama ese método. Si no existe un método que se ajuste exactamente, se intenta promover los argumentos actuales al tipo inmediatamente superior (cast implícito) y se llama el método correspondiente. Si sólo existen métodos con argumentos de un tipo más restringido, el programador debe hacer un cast explícito en la llamada, responsabilizándose de esta manera de lo que pueda ocurrir. El valor de retorno no influye en la elección del método sobrecargado. En realidad es imposible saber desde el propio método lo que se va a hacer con él. No es posible crear dos métodos sobrecargados, es decir con el mismo nombre, que sólo difieran en el valor de retorno. Ejemplo: 6

Métodos de clase (static) También puede haber métodos que no actúen sobre objetos concretos a través del operador punto. A estos métodos se les llama métodos de clase o static, estos pueden recibir argumentos pero no pueden utilizar la referencia this. Un ejemplo típico son los métodos matemáticos de la clase java.lang.math (sin(), cos(), exp(), pow(), etc.). Los métodos y variables de clase se crean anteponiendo la palabra static. Para llamarlos se suele utilizar el nombre de la clase, en vez del nombre de un objeto de la clase. Ejemplo: public class Circulo { static float PI = 3.14159f; private float radio; } En otra clase se puede usar el método o variable: System.out.println(Circulo.PI); Los atributos static tendrán el mismo valor para todos los objetos que se creen de esa clase. Es decir si se modifica el valor de un atributo static, el cambio afectará a todos los objetos de esa clase. Tipos de clase Java permite definir distintos tipos de clase dependiendo del comportamiento esperado u objetivo final. Por su nivel de acceso, las clases pueden ser públicas o no poseer ningún modificador (default). Por su tipo, las clases se pueden clasificar en concretas y abstractas. Por jerarquía de clases, pueden ser abstractas (más general) o finales (más específico). Así mismo, una clase no puede ser declarada como privada o protegida o estática al menos que sea miembro de otra clase. Estas clases se conocen como clases internas. 7

Clase pública Una clase pública proporciona acceso a todas las clases desde cualquier paquete, es decir, todas las clases en el Universo de clases tienen acceso a ella. Para poder utilizar una clase de tipo publica sólo es necesario importar el paquete al que pertenece. Una vez hecho lo anterior, se puede crear una instancia de dicha clase en cualquier momento. La sintaxis de una clase pública en Java es la siguiente: public class NombreClase { // Comentarios // Atributos de NombreClase // Métodos de NombreClase } Clase sin modificador Una clase sin modificador proporciona acceso a todas las clases que pertenecen a su mismo paquete, hereden o no de ella. Por tanto, para poder utilizar una clase sin modificador de acceso sólo es necesario pertenecer al paquete de dicha clase. Clase abstracta Una clase abstracta define la existencia de métodos, pero no su implementación, es decir, permite identificar métodos comunes para la toda jerarquía de clase sin especificar cómo se deben realizar las acciones de dichos métodos. Las clases abstractas sirven como modelo para la creación de otras clases (clases derivadas). Las características principales de las clases abstractas son: Pueden contener métodos abstractos y métodos concretos (con o sin implementación). Pueden contener atributos. Pueden heredar de otras clases. 8

La sintaxis de una clase abstracta es la siguiente: [modificadores] abstract class NombreClase { [modificadores] abstract float metodo(); } Una clase abstracta se declara simplemente con el modificador abstract, adicionalmente, se puede usar un modificador de acceso. Un método abstracto se declara de utilizando el modificador abstract, pero no se define una implementación, es decir, sólo se define la firma de la función que deben respetar todas las clases que sobrescriban dicho método. La clase que herede de una clase abstracta debe declarar e implementar el comportamiento de los métodos abstractos (a menos que ésta, la que hereda, sea abstracta). De no declararse (implícitamente), el compilador generará un error indicando que no se han implementado todos los métodos abstractos y que, o bien se implementen, o bien se declare la clase como abstracta. Es posible crear referencias a una clase abstracta: Polygon figure; 9

Sin embargo, no es posible crear una instancia (objeto) de una clase abstracta. Polygon figure = new Polygon(); El que una clase abstracta no se pueda instanciar es coherente con su descripción dado que este tipo de clases no tiene completa su implementación y encaja bien con la idea de que un ente abstracto no puede materializarse. Sin embargo, se puede realizar el llamado up-casting, un objeto se comporta como un elemento base: Polygon figure = new Triangle(); figure.getperimeter(); El up-casting es automático, es decir, no se requiere hacer un casting explícito para indicar el moldeo. Clase final Una clase que representa el final de la jerarquía de clases es un elemento suficientemente específico que no necesita modificarse. Cuando esto ocurre el funcionamiento de la clase se puede proteger evitando ser modificada por otras clases. En java para evitar que una clase pueda ser modificada se agrega la palabra reservada final a la declaración de la misma, consiguiendo que ésta no pueda ser heredada y, por ende, modificada. 10

Clase interna (inner class) Una clase puede ser etiquetada como privada, protegida o estática únicamente si es un miembro de otra clase. A estas clases se les conoce como clases internas. Una clase externa solo se puede crear con un modificador de acceso público (public) o sin modificador (default). Por lo tanto, una clase interna (inner o nested class) es un clase definida dentro de otra clase es decir, una clase que es, a su vez, miembro de otra clase. class Externa { // Comentarios // Atributos // Métodos class Interna { // Comentarios // Atributos // Métodos } } Normalmente, en este tipo de clases el objeto de la clase interna depende directamente de la clase externa, es decir, los objetos de la clase interna deben ser creados a partir de una instancia de la clase externa. Una instancia de la clase interna tiene acceso a todos los datos miembro de la clase que lo contiene (clase externa) sin utilizar un calificador de acceso especial, es decir, como si le pertenecieran. Las clases internas se clasifican en 4 tipos: Clases internas estáticas (clases anidadas de alto nivel). Clases internas miembro. Clases internas locales. Clases internas anónimas. 11

Clase interna estática Las clases internas estáticas, obviamente, debe declararse como clases estáticas. Para acceder a las clases estáticas internas no es necesario crear una referencia (instancia) de la clase externa, sólo hay que especificar donde se encuentra la clase interna estática, es decir, especificar la clase que la contiene. Desde la clase estática interna se puede acceder a los miembros estáticos de la clase externa. Para acceder a los miembros de instancia de la clase externa es necesario crear una referencia dentro de la clase interna hacia la clase externa. Clase interna miembro Estas clases se definen como miembro (no estático) de la clase contenedora. Se pueden declarar, incluso, como privadas o protegidas. A cada instancia de la clase externa (contenedora) se asocia una instancia de la clase interna miembro. La clase interna miembro tiene acceso a todos los atributos y métodos de la clase externa, incluyendo los privados. Una clase interna miembro no puede tener miembros estáticos. Tampoco debe tener nombres comunes con la clase externa. La única forma para acceder a la clase interna es creando una referencia a la clase externa. 12

Para las clases internas, la palabra reservada this hace referencia a la clase contenedora: ClaseExterna.this. Para crear una instancia de una clase interna se utiliza la clase externa: InstanciaClaseExterna.new ClaseInterna(). Si se hereda de una clase interna miembro y se quiere acceder a la clase base, es necesario hacer referencia a la instancia de la clase externa: InstanciaClaseExterna.super(). 13

Clase interna local Estas clases también llamadas clases internas de métodos locales, se definen dentro del bloque de código de un método, por lo tanto, solo se pueden utilizar dentro del código donde están declaradas. Pueden hacer uso de las variables locales y los parámetros del método declarados como final. No utilizan ningún modificador de acceso. No pueden ser estáticas. Estas clases no están disponibles de manera pública, por lo tanto son inaccesibles. 14

Clase interna anonima En esencia, las clases anónimas son clases internas locales sin nombre, de ahí que sea anónima. Se define al mismo tiempo al que se crea la instancia y, por tanto, sólo puede existir una instancia de una clase anónima. Los constructores de estas clases deben ser sencillos (sin argumentos), para evitar anidar demasiado código en una sola línea. 15

En resumen, los tipos de clases que existen en Java son: Públicas o sin modificador: Son las más comunes, accesibles desde cualquier otra clase en el mismo paquete (de otro modo hay que importarlas). Abstractas: Son clases bases que dan las bases para que rigen el comportamiento de las clases que las heredan. Finales: Son las que terminan la cadena de herencia. Útiles por motivos de seguridad y eficiencia de un programa, ya que no permiten crear más sub-divisiones por debajo de ellas. Internas: Estas clases sólo se pueden crear dentro de otra clase, es decir, una clase interna es una clase miembro de otra clase. 16

Bibliografía Sierra Katy, Bates Bert SCJP Sun Certified Programmer for Java 6 Study Guide Mc Graw Hill Martín, Antonio Programador Certificado Java 2. Segunda Edición. México Alfaomega Grupo Editor, 2008 Joyanes, Luis Fundamentos de programación. Algoritmos, estructuras de datos y objetos. Cuarta Edición México Mc Graw Hill, 2008 17