Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
PARADIGMAS DE PROGRAMACION Universidad Tecnológica Nacional Facultad Regional Mendoza Guía de programación O.O. cátedra de Paradigmas de Programación 9 1.5. Objetos Un objeto representa un ítem, unidad o entidad perfectamente identificable, ya sea real o abstracto, con un rol bien definido en el dominio de un problema. Las principales características de un objeto de dato podemos resumirlas en: 1. Estado Involucra a todas las propiedades (en general estáticas) del objeto de dato, además de los valores (en general dinámicos) actuales de cada una de esas propiedades del objeto. El estado queda determinado por el valor de sus atributos y en el lenguaje de programación, se implementa por medio de variables. 2. Comportamiento Es la descripción acerca de como actúa y reacciona un objeto, en términos de cambios de estado e intercambio de mensajes, o sea que el comportamiento de un objeto está definido por sus acciones y en el lenguaje de programación, se implementa por medio de funciones. 3. Identidad Es la propiedad que hace que un objeto se distinga de cualquier otro del mismo tipo, no debe confundirse con el concepto de nombre que se le asigna a un objeto para identificarlo como abstracción dentro del sistema. En un lenguaje de programación, esto podríamos asociarlo con la dirección de memoria que ocupa. Ejemplos de objetos pueden ser: • cosas tangibles como un auto, un avión, un libro, un reactor nuclear, una alarma (el dispositivo). • roles que cumplen personas u organizaciones como un cliente, un empleado, un abogado, un departamento, un empleador, un vendedor. • ocurrencias o eventos en el tiempo como un accidente, un llamado, un vuelo, la parada de un sistema, una alarma (el hecho que suene). • las interacciones que relacionan con otros objetos una compra, una venta, un casamiento. • las especificaciones de otros objetos como el modelo de un auto, un tipo de seguro, etc. ? Qué define el estado de un objeto. 1.5.1. Descripción de los objetos La descripción de un objeto, es aquella información relativa al mismo, que nos permite afirmar con certidumbre, que una cosa del mundo real o no, es una instancia del tipo de objeto en cuestión o no, de acuerdo a la conceptualización del mismo dentro del modelo de información. PARADIGMAS DE PROGRAMACION Universidad Tecnológica Nacional Facultad Regional Mendoza Guía de programación O.O. cátedra de Paradigmas de Programación 10 Generalmente en un sistema complejo, la descripción que hacemos de los objetos, pasa por definir claramente las condiciones y características que debe reunir para ser una instancia. Por ejemplo, en un sistema para el registro de la patente automotor, el vehículo debe tener una antigüedad menor de 30 años, para ser incluido en la nómina de unidades que están obligadas a pagar. En este caso, si bien un auto puede tener todas las características de los “objetos auto”, para este sistema en particular no podrá ser considerado como tal. Otro punto importante a describir de los objetos, es su relación con otros, sobre todo cuando es requisito para que exista dentro del sistema, que otro objeto también exista. La descripción de las características generales de los objetos se realiza a través de la definición de clases. 1.5.2. Definición de clases Especificar una clase, es similar a definir un nuevo tipo de dato, en particular un tipo abstracto de datos. Para la especificación usaremos la palabra reservada class. Una clase puede estar formada por cualquier combinación de componentes privados, públicos o protegidos. Básicamente especificar una clase, es similar a definir un nuevo tipo de dato, en particular un tipo abstracto de datos. Para la especificación usaremos la palabra reservada class. Una clase puede estar formada por cualquier combinación de componentes privados, públicos o protegidos. Si no se especifica nada, se asumen como privados. Las variables de instancia y métodos de una clase, son calificados según las siguientes categorías, las cuales determinan el acceso que se pueden tener a cada miembro de la clase en un programa Java: public: los miembros son visibles para la propia clase y al resto de ellas. private: los miembros sólo son visibles para la propia clase. protected: los miembros son visibles para la propia clase, las subclases de esta y las clases que pertenecen al mismo paquete. private protected: los miembros son visibles sólo para la propia clase y las subclases de esta. friendly: valor por defecto si no se indica nada, equivale a protected. ? En qué se diferencian los conceptos de clase y objeto. 1.5.3. Atributos Las características de los atributos podemos resumirlas en: 1. Un atributo es una característica que poseen todos los objetos de un determinado tipo. 2. Los atributos son aquellos datos que permiten especificar la descripción completa de un objeto. PARADIGMAS DE PROGRAMACION Universidad Tecnológica Nacional Facultad Regional Mendoza Guía de programación O.O. cátedra de Paradigmas de Programación 11 3. Un atributo puede ser una referencia a otro objeto. 4. Los atributos permiten describir el estado de un objeto. Supongamos que estamos caracterizando los objetos del tipo auto, con una lista de atributos que ayudan a describir a un auto en particular: el color, el modelo, el tipo de motor, etc. Los atributos que interesan a un sistema en particular, no necesariamente serán los mismos para otro. Por ejemplo, el atributo, número de patente es necesario para un sistema de recaudación de impuestos, pero no lo es para un sistema de stock en fábrica. Cuando describimos los atributos de un objeto, algunos de los aspectos que se indican son: el nombre por el cual lo referimos, el tipo de valor al que se refiere, el rango de valores que puede tomar, y cualquier otro aspecto que ayude a la descripción del mismo. Podemos clasificar los atributos de un objeto como de: 1. Instancia: en que cada objeto tiene su propia copia del atributo. 2. Clase: es único y todos los objetos de una clase lo comparten. 1.5.4. Métodos Describen los distintos comportamientos que tiene un objeto, frente a la recepción de estímulos externos al mismo. En general las responsabilidades de un objeto, son implementadas a través de los métodos. Los métodos, son básicamente rutinas para procesar determinados mensajes, que un objeto reconoce. Los métodos podemos clasificarlos según sus características en: 1. Internos: son funciones de uso interno de la clase, pero no puede ser ejecutados en forma directa mediante el envío de mensajes externos. 2. Instancia: Son aquellos que reflejan las responsabilidades asignadas a los objetos de una clase. 3. Clase: Son aquellos que reflejan las responsabilidades asignadas a la clase en sí, por ejemplo la creación de objetos. 1.5.5. Mensajes y métodos Una vez definida una clase pueden definirse objetos de esa clase y activar sus métodos. Un programa O.O. Se basa en el intercambio de mensajes entre objetos que pertenecen a alguna clase. Un objeto sólo puede reaccionar ante mensajes para los cuales tenga definidos métodos específicos. La forma genérica de enviar un mensaje es la siguiente: Id-objeto.id-método(argumentos) donde el punto indica que id-método es un miembro del objeto id-objeto. 1.6. Objetos de un programa Un programa O.O. trabaja en base a un conjunto de objetos, que encapsulan las propiedades y comportamientos del sistema que se ha modelado. Estos objetos son creados a partir de definiciones previas y durante la ejecución de la aplicación intercambian mensajes entre sí. PARADIGMAS DE PROGRAMACION Universidad Tecnológica Nacional Facultad Regional Mendoza Guía de programación O.O. cátedra de Paradigmas de Programación 12 Al recibir un mensaje un objeto cualquiera, se activa el método correspondiente. Como resultadode esto un objeto puede cambiar su estado o no, enviar un mensaje a otro objeto, devolver un valor, y/o cualquier otra acción, según lo especificado en la implementación del método. Un objeto responde a los mensajes que se le envían, usando los métodos que figuran en la descripción de su clase. El estado de un objeto es almacenado en las llamadas variables de instancia, la especificación de estas figura en la descripción de la clase a la que pertenece el objeto es cuestión. El nombre de un método está asociado a la clase en que se define, por esto otra clase puede tener un método con el mismo nombre y cuando se active un método de un objeto, se ejecutará el que corresponde a la clase a la que pertenece el objeto. ? Es obligatorio definir constructores en cada clase. 1.7. Constructores y destructores de objetos Cuando en un lenguaje tradicional, declaramos una variable de algún tipo primitivo, al ejecutarse dicha sentencia, son realizadas diversas tareas relacionadas con su creación, como la reserva de espacio e inicialización (si corresponde). Por lo general para la creación y destrucción de cualquier objeto, se deben realizar una serie de tareas, estas últimas son indicadas en métodos especiales, que son los constructores y el destructores de la clase. Las variables de instancia de los objetos de una clase sólo pueden ser inicializadas por el constructor al crearse los objetos en tiempo de ejecución. Estos métodos son llamados en forma automática para crear o destruir objetos. Al definir un constructor se le debe dar el mismo nombre que a la clase Una clase puede tener definidos varios constructores (a esto se le denomina sobrecarga), para diferentes situaciones de uso de la misma, por ejemplo el constructor de copia de objetos de la clase, que es usado para crear duplicados de los objetos de una clase. Los constructores, en realidad son métodos de la clase, ya que no son ejecutados para una instancia de objeto en particular, sino justamente para crearlo. No devuelven ningún valor y no se debe indicar nada como tipo de devolución, ni siquiera la palabra void. La inicialización de las variables de instancia de un objeto, se hace al declararlas en la clase o por medio del constructor. ? Cuántas formas de pasaje de parámetros tiene Java. Instancia de un objeto auto: ATRIBUTOS: Patente = AXT342 Propietario = "P. García" Marca = "Ford" MÉTODOS: MENSAJES: pagarImpuesto pagarImpuesto elDueño elDueño cualEsLaMarca cualEsLaMarca PARADIGMAS DE PROGRAMACION Universidad Tecnológica Nacional Facultad Regional Mendoza Guía de programación O.O. cátedra de Paradigmas de Programación 13 1.8. Sobrecarga de métodos Una clase puede tener funciones (métodos), con el mismo nombre e implementaciones diferentes, pero que deben poder diferenciarse por la lista de parámetros, ya sea por la cantidad de parámetros o el tipo. Esto es lo que se denomina sobrecarga (ver SSL). En cada situación de uso, la función a ejecutar es asociada de acuerdo al prototipo que se adapta a la llamada. EJEMPLO import java.io.*; class NumeroRacional{ private long numerador; // se inicializan en 0 por defecto private long denominador; public NumeroRacional(long n, long d){ numerador = n > 0 ? n : 0; // se restringe a positivos denominador = d > 0 ? d : 0; } public NumeroRacional(){ // constructor sobrecargado numerador = 0; denominador = 0; } public NumeroRacional(NumeroRacional obj){ // constructor sobrecargado de copia numerador = obj.numerador; denominador = obj.denominador; } public void asignar(long n, long d){ numerador = n > 0 ? n : 0; // se restringe a positivos denominador = d > 0 ? d : 0; } public void asignar(NumeroRacional obj){ // EN JAVA: if (obj != this) { // para evitar reasignar el mismo objeto numerador = obj.numerador; // los objetos de tipo no primitivo denominador = obj.denominador; // siempre se pasan por referencia } } public boolean esIgual(NumeroRacional obj){ // método para comparar dos números return numerador == obj.numerador && denominador == obj.denominador; } } public class prueba { public static void main(String [] arg){ NumeroRacional a, b, c, d; a = new NumeroRacional(); // EN JAVA: b = new NumeroRacional(3, 4); // los objetos de tipo no primitivo c = new NumeroRacional(b); // sólo pueden crearse en forma d = new NumeroRacional(b); // dinámica a.asignar(b); if (c.esIgual(d)) PARADIGMAS DE PROGRAMACION Universidad Tecnológica Nacional Facultad Regional Mendoza Guía de programación O.O. cátedra de Paradigmas de Programación 14 System.out.println(“Iguales”); else System.out.println(“Distintos”); } } ? Cómo se destruye explícitamente un objeto en Java. Comentarios acerca del programa: La variable this que se utiliza en la sentencia if ( obj != this), en una referencia (un puntero) que pertenece al ambiente predefinido de referencia de Java. Siempre contiene la dirección de memoria del objeto para el cual se ha activado el método que se está ejecutando. En este caso se la utiliza para verificar que la referencia al objeto obj no sea la misma que la del objeto activo, ya que en ese caso se estaría asignando el mismo objeto. Si bien otros lenguajes O.O. permiten implementar métodos destructores, para destruir los objetos de datos creados en forma dinámcia, en Java no es necesario, ya que posee un mecanismo automático de destrucción.
Compartir