Terminología a usar • Clase Define las características del Objeto. • Objeto Una instancia de una Clase. • Propiedad Una característica del Objeto, como el color. • Método Una capacidad del Objeto, como caminar. • Constructor Es un método llamado en el momento de la creación de instancias. • Herencia Una Clase puede heredar características de otra Clase. • Encapsulamiento Una Clase sólo define las características del Objeto, un Método sólo define cómo se ejecuta el Método. • Polimorfismo Diferentes Clases podrían definir el mismo método o propiedad. Modificadores de acceso • Se pueden poner a una clase o miembro (campo o método) indican desde dónde es accesible. • Modificadores de acceso para atributos y metodos: • public: accesible desde todo el programa • private: accesible sólo desde esa clase • protected: accesible desde el paquete clase padre y desde sus subclases Conformación de Programación orientada a objetos • La clase es la unidad básica de estructuración en un lenguaje orientado a objetos • Está formada por miembros: atributos (también llamados campos): almacenan el estado métodos: definen el comportamiento
Una clase es una descripción de un conjunto de objetos con
los mismos atributos y comportamiento • public class UnaClase { atributos, constructores, métodos } • Un objeto es una instancia o ejemplar concreto de una clase Creación e inicialización de objetos • Los objetos se crean con el operador new: – UnaClase obj = new UnaClase(); • Los constructores son métodos especiales que se llaman igual que la clase no tienen tipo de retorno • Una clase puede tener varios constructores con diferentes parámetros – public UnaClase() { ... } – public UnaClase(int i) { ... } – public UnaClase(boolean b, int i) { ... }
• Si y sólo si no definimos constructor, la clase tendrá el
constructor por defecto (constructor sin parámetros) Inicialización de los atributos • Cuando se crea un objeto sus atributos se inicializan en 3 etapas: • 1.Se asigna a cada atributo su valor por defecto – - tipos numéricos (int, double, ...): 0 (o 0.0) – - Caracteres (char): carácter nulo – - Booleanos (boolean): false – - Referencias a objetos (String, otras clases): null
• 2.Si la declaración del atributo contiene un inicializador,
éste es evaluado y asignado – private int numRuedas = numCoches * 4; • 3.Se ejecuta el constructor de la clase, que puede cambiar el valor de los atributos que desee Tipos primitivos de datos • Cuando se declarara una variable el compilador reserva un área de memoria para ella • Cuando se asigna un valor, éste es escrito en el área reservada
• La asignación entre variables significa copiar el
contenido de una variable en la otra Referencias y objetos • Cuando se declara una variable “objeto” la situación es diferente • Si no se usa el operador new sólo se crea una referencia a objeto • El espacio en memoria del objeto se reserva con el operador new Asignaciones entre objetos • La asignación entre objetos sólo copia referencias, después de la copia ambas referencias apuntan al mismo objeto Recolector de basura (Garbagge collector) • La memoria ocupada por un objeto se reserva con el operador new no existe ningún operador para liberar la memoria de un objeto que no se va a usar más • La liberación de memoria la realiza el Recolector de Basura de forma automática, el recolector va contando el número de referencias que “apuntan” a cada objeto • Cuando un objeto no está apuntado por ninguna referencia, se convierte en “basura” (no va a poder ser utilizado nunca más) en los periodos de inactividad del sistema, el recolector reincorpora la “basura” a la memoria disponible Ejemplo de recolección de basura Control de acceso • Los sistemas software pueden llegar a ser muy complejos. Para abordar con éxito su desarrollo es necesario aplicar los principios de: – modularidad: descomposición del sistema en un conjunto de “piezas” poco acopladas – ocultamiento de información: se ocultan los detalles de implementación de las “piezas” Uso común de los modificadores de acceso • Lo común es que una clase: – tenga todos sus atributos privados – sólo proporcione los métodos públicos estrictamente necesarios
De esta forma el estado del objeto sólo puede
cambiar a través de unos puntos de entrada bien definidos Ejemplo de modificadores de acceso Concepto sencillo Herencia • ¿En qué consiste? • Existen dos clases, a las que llamaremos padre (superclase o clase base) e hija (subclase o clase derivada) • Al igual que las herencias en la vida real, la clase hija pasa a tener lo que tiene la clase padre Atributos Métodos Un objeto de la clase hija es también un objeto de la clase padre Herencia(2) • Al extender una clase – se heredan todas las operaciones del padre – se puede añadir nuevas operaciones – La nueva clase puede elegir para las operaciones heredadas: • redefinir la operación: se vuelve a escribir - la nueva operación puede usar la del padre y hacer más cosas: programación incremental - o puede ser totalmente diferente - dejarla como está: no hacer nada La herencia se puede aplicar múltiples veces • da lugar a una jerarquía de clases • El mecanismo de herencia permite definir nuevas clases partiendo de otras ya existentes. Las clases que derivan de otras heredan automáticamente todos sus comportamientos, pero además pueden introducir características particulares propias que las diferencian. • La programación orientada a objetos va más allá, permitiéndonos definir clases a partir de otras clases ya construidas. • Por ejemplo, las bicicletas de montaña, las de carretera y los tándems son todos, en definitiva, bicicletas. En términos de programación orientada a objetos, son subclases o clases derivadas de la clase bicicleta. Ejemplo herencias de clase Bicicleta Explicación • Las bicicletas de montaña, las de carretera y los tándems comparten algunos comportamientos: frenar y cambiar la cadencia de pedaleo, por ejemplo. Especializaciones dentro de las clases heredadas • No estamos limitados a un único nivel de herencia. El árbol de herencias o jerarquía de clases puede ser tan extenso como necesitemos. • Los métodos y las variables miembro se heredarán hacia abajo a través de todos los niveles de la jerarquía. • Normalmente, cuanto más abajo está una clase en la jerarquía de clases, más especializado es su comportamiento. En nuestro ejemplo, podríamos hacer que la clase bicicleta derivase de una superclase de vehículos. Otro ejemplo de Herencia • Los atributos y métodos de la superclase no se repiten en las subclases, salvo que se hayan redefinido Principal ventaja de realizar herencia en Programación orientada a objetos • Las clases derivadas o subclases proporcionan comportamientos especializados a partir de los elementos comunes que hereda de la clase base. • A través del mecanismo de herencia los programadores pueden reutilizar el código de la superclase tantas veces como sea necesario. Métodos Constructores • Un constructor es un método especial de una clase que se llama automáticamente siempre que se declara un objeto de esa clase. Métodos Constructores(2) • Cuando se crea un objeto se realizan las siguientes operaciones de forma automática: • 1. Se asigna memoria para el objeto. • 2. Se inicializan los atributos de ese objeto con los valores predeterminados por el sistema. • 3. Se llama al constructor de la clase que puede ser uno entre varios. Constructores: características • En una clase puede haber varios constructores con el mismo nombre y distinto número de argumentos • No se hereda. • No puede devolver ningún valor (incluyendo void). • Debe declararse público para que pueda ser invocado desde cualquier parte donde se desee crear un objeto de su clase.
Método constructor: Por defecto • Si para una clase no se define ningún método constructor se crea uno automáticamente por defecto. • El constructor por defecto es un constructor sin parámetros que no hace nada. Los atributos del objeto son iniciados con los valores predeterminados por el sistema. • nombreConstructor ( ) { } Constructores: Ejemplo de clase sin constructor • public class Fecha { • private int dia; • private int mes; • private int año; • • public void setDia(int d) { • dia = d; • } • public void setMes(int m) { • mes = m; • } • public void setAño(int a) { • año = a; • } • } Continúa… • En el ejemplo anterior no se ha definido ningún constructor, por lo que al declarar un objeto el compilador utilizará un constructor por defecto. • En este caso el método constructor por defecto es: • Fecha( ) { } Ejemplo de constructor de la clase Fecha • public Fecha(int d, int m, int a) { • dia = d; • mes = m; • año = a; • } Creación de objetos de la clase Fecha • Fecha fecha1 = new Fecha(10,10,2016); • Se crea un objeto fecha1 y se le asignan esos valores a sus atributos. • En este ejemplo hemos definido un método constructor Fecha(int d, int m, int a) por lo que también es necesario poner el método constructor por defecto Fecha(). • Este constructor Fecha() se invocará cuando se declare un objeto sin parámetros. Creación de objetos con diferentes constructores
• Fecha f1 = new Fecha();
• //se ejecuta el constructor sin parámetros
• Fecha f2 = new Fecha(1,1,2010);
• //se ejecuta el constructor con parámetros Definición de Constructor Copia • Se puede crear un objeto a partir de otro de su misma clase escribiendo un constructor llamado constructor copia. • Este constructor copia los atributos de un objeto existente al objeto que se está creando. • Los constructores copia tiene un solo argumento, el cual es una referencia a un objeto de la misma clase que será desde el que queremos copiar. Constructor copia: usando el constructor copia para los objetos • Fecha fecha = new Fecha(1,1,2011); • //se invoca al constructor con parámetros
• Fecha fecha1 = new Fecha(fecha);
• //se invoca al constructor copia Constructor copia: ejemplo con la anterior clase • public Fecha(Fecha f) { • dia = f.dia; • mes = f.mes; • año = f.año; • }
• El constructor copia recibe una referencia al
objeto a copiar y asigna sus atributos uno a uno a cada atributo del objeto creado. Métodos y campos de clase (o estáticos) • Una clase puede tener atributos y métodos estáticos: – no pertenecen a los objetos de la clase, sino a la clase misma – si son atributos, sólo existe uno por clase, no uno por objeto – la vida que tienen es la de la clase, y no la del objeto • Nos referimos a ellos como NombreClase.miembroEstático FINAL DE LA PRESENTACION