tema1
Post on 24-Jan-2016
212 Views
Preview:
DESCRIPTION
TRANSCRIPT
Tema 1:Introducción a la ProgramaciónOrientada a ObjetosProfesor: Iván Jiménez Utiel
Introducción• Un paradigma es una forma de afrontar la construcción de código software
• Distintos paradigmas: POO, Estructurado, Lógico, Funcional, ...
Programación Orientada a Objetos (POO)
• Facilidad de diseño y relación con el mundo real
• Reusabilidad y facilidad de mantenimiento
• Sistemas más complejos
◦ Abastracción
◦ Trabajo en equipo
• Del lenguaje máquina hacia el mundo real
• Resuevle problema complicados -> no está pensado para tareas sencillas
Conceptos esenciales de la POO• Abstracción
◦ Un coche en sí es una idea abstracta -> hasta que concretas color, marca, modelo, etc.
• Encapsulación
◦ Es la forma que tienes de ocultar objetos y clases.
• Herencia
◦ Es la forma de reutilizar código sin tener que reescribrilo otra vez
• Polimorfismo
◦ Existen objetos que pueden actuar de una forma u otra, dependiendo de la situación.
Lenguaje UML (Unified ModelingLanguage)
• Lenguaje unificado de modelado
• Sirve para describir el análisis y diseño de la aplicación
• Especificación de diagramas UML 2.0 (13 tipos de diagramas)
Programación Orientada a Objetos• Objetos: elemenos que interactúan entre sí para conseguir un fin
◦ Son autónomos
◦ Con funcionalidad concreta definica
◦ Instancias de una clase
• Clases:
◦ Especificación de un conjunto de elementos.
• Todo objeto pertenece a una clase
Objetos y Clases
Objetos y Clases• Los objetos tienen propiedades que los distinguen
◦ Comunes a todos los de su clase
◦ Propias de cada uno
• Los objetos interactúan entre sí por medio de mensajes
• Los objetos representan los coceptos fundamentales del programa, integrando su funcionalidad.
Objetos y clases• Clases
◦ Representan conceptos o entidades significativas de un problema
◦ Se peuden ver como plantillas para definir elementos (objetos)
◦ Pueden estar directamente relacionadas unas con otras
• Objetos
◦ Elementos con comportamiento definido en la clase y estado concreto
◦ Instancia de clase
◦ Interactúan por medio de mensajes
Comportamiento y EstadoMétodos y atributos
• Comportamiento: describe los servicios que proporciona una clase (lo que se puede hacer conella). Son los métodos.
◦ El comportamiento distingue los objetos de una clase con los de otra.
• Estado: Describe la situación interna del objeto. Existen varias formas de definir distintos estados.Son los atributos.
◦ El estado distingue a los objetos de la misma clase -> cada uno tiene su estado.
◦ Pueden ser
▪ Tipos básicos (int, boolean, short, etc.)
▪ Arrays
▪ Otros objetos
Atributos y varibales• Atributo de instancia: definido para las instancias de una clase -> copia del objeto.
• Atributo de clase: definido en la clase -> cpia por clase (común para todos los objetos):
◦ static int numero = 5;
• Variable local: definida dentro del cuerpo de un método. De ámbito restringido.
Métodos1 tipo_retorno nombre método (parámetros) {2 código_método3 }
• Definen el comportamiento de los objetos de una clase
• Devuelven un resultado
• Pueden necesitar parámetros
Métodos habituales
• Constructor
◦ Se ejecuta al crear un objeto
◦ Sirve para inicializar un objeto al crearlo
◦ Existe sobrecarga (distintos parámetros) para cualquier método.
◦ Coincide con el nombre de la clase y no devuelve nada por definición -> no se indica el tipode retorno
◦ Aunque no se escriba, se crea uno vacío por defecto.
• Destructor
◦ Se ejecuta al destruir el objeto y no se suele utilizar (Garbage Collector:gc)
◦ Se tiene que sobreescribir y no devuelve nada: void finalize()
Métodos habituales• Método main o punto de entrada:
◦ Método que se invoca al comienzo de un programa
◦ Al menos, una clase del programa debe tenerlo (clase principal)
◦ Sólo ejeucta el de la clase principal
◦ Varias clases pueden tener un punto de netrada, pero sólo se ejecutará el de una de ellas.public static void main(String[] args)
Uso de objetos e interacción
• Los objetos son instanciaciones de las clases. Es necesario realizar dicha instancicación parapoder utilizarlos.
• Se comunican entre sí mediante paso de mensajes.
• La invocación de los métodos es la manera en la que se realiza el paso de mensajes.
Declaración de una clase1 public class NombreClase {2 //Atributos3 tipo atributo1;4 tipo atributo2;5 ...67 //Métodos8 tSalida nombreMetodo1 (params) {9 //Contenido Método1
10 }1112 tSalida nombreMetodo2 (params) {13 //Contenido Método214 }15 ...16 }
Declaración de una clasepublic class Gato {
//Atributos
String nombre;int edad;
//Métodos
Gato (String nombre) {this.nombre = nombre;
}
void maullar() {System.out.println("Miau");
}
public static void main (String[] args){Gato miGato = new Gato();miGato.maullar();
}}
Creación de objetos• Para poder usar un objeto hay que crearlo:
clase identificador = new clase();
Gato miGato = new Gato("Missy");
Operador .
• El operador . (punto) permite acceder a los miembros de una clase.
• Se usa tanto para atributos como para métodos.
◦ Gato miGato = new Gato("Missy");
◦ miGato.edad = 1;
◦ miGato.maullar();
Operador thisclass Gato {
String nombre;
Gato (String nombre){this.nombre = nombre;
}
}
• Para referirse a un objeto desde sí mismo, se usa la palabra reservada this
• Representa la referencia del objeto actual.
• Se utiliza implícitamente para hacer referencia a los atributos y métodos.
• Por conveniencia, aunque no fuera necesario, se suele utilizar siempre para los atritubos de clase.
Uso de Objetos• Una vez creado (instanciado) un objeto, podemos enviarle mensajes y modificar su estado.
◦ Invocando métodos
◦ Accediendo a sus atributos (no se debe hacer):
▪ Gato miGato = new Gato("Missy");
▪ miGato.edad = 1;
▪ miGato.maullar();
Acceso directo a atributos
• El acceso directo a atributos no es recomendable porque revela la estructura interna del objeto.
◦ Los método definin cómo se debe usar un objeto. Permitir el acceso a atributos es dar víalibre a manipular su estado sin control.
• En su lugar se deben definir métodos que, de forma genérica, modifiquen el esado de acuerdo aconsideraciones semánticas.
• Se debe prohibir el acceso a los atributos.
Encapsulación• Existen distintos niveles de visibilidad: protected, public, private, default (no indicar nada)
• De esta forma se controla qué cosas son modificables y cómo se pueden modificar.
Visibilidadpublic class Coche {
private String color;
public void ponColor(color) {this.color = color;
}
public static void main(String[] args){Coche c = new Coche();c.ponColor("ROJO");c.color = "VERDE"; //Qué ocurre con esta llamada?
}}
• La visibilidad se puede indicar usando las palabras reservadas: public, private y protected alcomienzo de una declaración:
• si no se indica la visibilidad, por defecto:
◦ Atributos son "private"
◦ Métodos són "public"
◦ Clases son "protected"
Ejercicio• Utilizando la clase Gato, crea un objeto de la clase Gato y haz que su nombre contenta el valor
"Missy".
• Imprime el atributo del nombre.
• Crea el método dameNombre de la clase Gato que devuelva el atributo nombre y llámalo desde elmain.
Ejercicio (II)• Crea el constructor para la clase Gato de manera que reciba un nombre y una edad y asigne esos
valores a los atributos correspondientes.
• Crea un objeto de la clase Gato con el nuevo constructor.
Sobrecarga de métodos• Varias declaraciones de un método con el mismo nombre
• Distintas implementaciones en función de los parámetros recibidos
• Se puede aplicar al constructor
• Métodos con el mismo nombre pero con distintos parámetros de entrada.
• El tipo de retorno puede cambiar
◦ Sólo los parámetros de entrada son distintos
◦ No puede haber dos métodos con el mismo nombre, los mismo parámetros de entrada perodistinto tipo de salida.
Ejemplo de Sobrecargaclass Gato {
String nombre;int edad;
Gato(String nombre, int edad){this.nombre = nombre;this.edad = edad;
}
Gato(String nombre){this.nombre = nombre;this.edad = 0;
}}
• Ejercicio: crear un método maulla que imprima Miau y otra versión del mismo método con elmismo nombre (sobrecarga) que imprima el parámetro de tipo String que reciba de entrada.
Métodos y variables estáticos de clase• Muchas veces nos hacen falta métodos que no necesiten de un objeto para ser llamados: ej.
Math.sqrt(4,2);
• Tienen el modificador static delante de la declaración.
◦ static tipo nombreMetodo(param) { }
◦ Ej. static int edad;
• El modificador static en variables o atributos sirve para compartir información entre todas lasinstancias de la clase, son llamadas variables de clase. Se asocia más a la clase que al objeto.
• Mismo funcionamiento para métodos static
• La JVM llama al método sin crear el objeto.
• El método main() es estático -> si fuera un método de instancia, no podría llamarse.
• Suele ser más eficiente llamar a atributos y métodos estáticos.
• Idea final: si queremos atributos o métodos que no tengan que instanciarse, utilizar static
• Limitaciones: en los métodos no podremos utilizar ni this, ni super.
Modificador final• Para definir constantes -> se inicializan un sola vez.
• Se inicializan al ser declaradas o en el constructor.
• Si la constante es común para todos los objetos, se utiliza una variable de clase (static).
• Se utilizan mayúsuclas para el nombre:
◦ Ej: static public final double PI = 3.1415;
Ejemplo con finalpublic class Incremento {
private int total = 0;
private final int INCREMENTO;
public Incremento(int valor){INCREMENTO = valor;INCREMENTO = 3; } // Qué ocurriría aquí?
 }
public void anyadirIncremento() {total += INCREMENTO;
}}
Paquetes y Módulos• El código de una clase pública se encuentra en un archivo .java
• El nombre del archivo coincide con el nombre de la clase
• Excepción:
◦ En un archivo podría haber varias clases, sólo de una de ellas es public y el resto auxiliares.
• Los paquetes contienen a un conjunto de clases relacionadas
• Los paquetes ayudan a manejar la complejidad de las aplicaciones
• Facilitan la reutilización del SW permitiendo a los programas el importar clases de otros paquetes
• En Java existen tres tipos de módulos: paquetes, clases y métodos.
• Java provee un API (jdk 1.6/1.7) con diversos módulos.
Paquetespackage ejemplo;public class {
...}
• Puede haber más de una clase en el mismo fichero fuente -> pero sólo una puede ser pública ydebe coincidir en nombre con el fichero
• Lo habitual suele ser tener una clase por cada fichero fuente
• El paquete al que pertenece una clase se indica al comienzo del fichero
• Una clase sólo puede pertenecer a un paquete
• Se pueden organizar los paquetes de forma jerárquica: `package ejemplo.objetos;
• Para usar una clase que está en distinto paquete:
◦ Se puede importar un conjunto de clases: import ejemplo.*;
◦ O una clase concreta: import ejemplo.clase;
top related