1/31/12
Introducción
! ¿Qué es la POO?
! Un paradigma de programación
! Un paradigma es una forma de afrontar la construcción
código software
! No hay paradigmas mejores ni peores
! Todos tienen sus ventajas e inconvenientes
! Hay distintos paradigmas: POO, Estructurado, Funcional,
Lógico, etc.
Programación orientada a
objetos
Curso INEM. Programación en Java
Santiago Muelas Pascual
[email protected]
Características de la POO
Elementos de la POO
! Facilidad de diseño y relación con el mundo real
! Reusabilidad y facilidad de mantenimiento
! Del lenguaje máquina hacia el mundo real
! Sistemas más complejos
! Abstracción
! Trabajo en equipo
! Objetos: Elementos que interactúan entre sí para conseguir
un fin
! Autónomos
! Con una funcionalidad concreta definida
! Instancias de una clase
! Clases:
! Especificación de un conjunto de elementos
! Todo objeto pertenece a una clase
Objetos y clases
Objetos
! Los objetos tienen propiedades que los distinguen
! Comunes a todos los de su clase
! Propias de cada uno
! Los objetos representan los conceptos fundamentales del
programa
! y de su interacción surge la funcionalidad
! Los objetos interactúan entre sí por medio de mensajes
1
¿Como funciona un programa
orientado a objetos?
No hay
Buscar el
café
café
Comprar
café
Café
Cocina
Tienda
Resumen de objetos y clases
! Clases
! Representan conceptos o entidades significativas de un
problema
! Se pueden ver como plantillas para definir elementos (objetos)
! Objetos
! Elementos con comportamiento definido en la clase y estado
concreto
! Instancias de clase
! Interactúan por medio de mensajes
Ejemplo
Otros conceptos importantes
! Polimorfismo
! Herencia
! …
Se verán más adelante
UML
Declaración de clases
! UML (Unified modeling language): Lenguaje unificado de
! Una clase en Java debe ser declarada antes de poder ser
modelos
! “Mapa” del código. No sirve para desarrollar sino para
describir
! Se utilizan diagramas diferentes.
! 13 en UML 2.0
utilizada
class nombre {!
cuerpo de la clase!
}!
1/31/12
2
1/31/12
Atributos o variables de
instancia
! Describen el estado interno de cada objeto concreto
! Pueden ser:
! Tipos básicos (int, boolean, char, etc.)
! Arrays de elementos
! Otros objetos
tipo nombre_variable;
Cuerpo de la clase: atributos y
métodos
! Estado: Describe la situación interna del objeto.
! Existen varias formas de definir distintos estados
! El estado distingue a los objetos de la misma clase
! Cada uno tiene su estado
! Son los atributos o variables de instancia
! Comportamiento: Describe los servicios que proporciona
una clase lo que se puede hacer con ella).
! Son los métodos
Métodos
Métodos
! Definen el comportamiento de los objetos de una clase
! Permiten acceder y modificar a los atributos
! Devuelven (o no) un resultado
! Pueden necesitar parámetros
tipo_retorno nombre (parámetros) {
código
}
! Para promocionar la reusabilidad cada método debería estar
limitado a realizar un tarea muy concreta
! El nombre de esa tarea tiene que expresar claramente la acción
del método
! Un método que realiza una única tarea es más sencillo de
comprobar y de depurar que uno que realice varias
Métodos
Métodos
! Permiten modularizar un programa separando sus tareas en
unidades auto contenidas
! Ventajas:
! Divide y vencerás
! Reutilización
! Evitar duplicidad
! Facilita la depuración y el mantenimiento
! En Java todo método tiene que pertenecer a una clase
! El programa principal main es un método de una clase
! Los objetos interactúan por medio de mensajes
! Un objeto le pide a otro que realice una acción (ejecuta el
método X)
! El objeto llamado realiza la acción pudiendo devolver un
resultado
! puede no devolver nada
! El objeto llamante no conoce los detalles de cómo se lleva a
cabo la acción
3
1/31/12
Esquema general
Uso de un método
Argumentos
a1
...
an
a2
Método
Valor de
retorno
Método(a1, ..., an)
resultado
Puede no
devolver un
resultado
! Se invoca proporcionando valores a los argumentos de
llamada
! El valor de retorno se devuelve por medio de un return
! Se admiten métodos que no devuelvan nada
! tipo void como tipo de retorno
! Sólo con este tipo no es obligatorio usar la sentencia return
! Los métodos admiten recursividad
Métodos y atributos
Ejemplo
• Atributos
•
raza: Bulldog
• edad: 1 año
• nombre: “Pancho”
• …
• Métodos
•
ladra()
• come()
• duerme()
• …
public class Perro {
// Atributos
String nombre;
int edad;
// Métodos
void ladra() {
System.out.println(“Guau”);
}
void cambiarNombre(String nuevonombre){
nombre = nuevonombre;
}
}
Creación de objetos
Acceso a atributos
! Por medio del operador new
! Por medio del operador .
NombreClase variable = new NombreClase();
! Se le pueden pasar parámetros
! Método constructor
!
lo veremos en las siguientes transparencias
variable.atributo;
! Dentro de un método no hace falta utilizar el operador . para
Ej: System.out.println(miPerro.nombre);
acceder a un atributo o variable de instancia
4
1/31/12
Llamada a métodos
Ejemplo
! Por medio del operador .
Ej: miPerro.ladra();
public class Perro {
String nombre;
public void ladra() {
System.out.println(“GUAU”);
}
public static void main(String[] args) {
Perro miperro = new Perro();
miperro.ladra();
}
}
Ejercicio
! Utilizando la clase Perro mostrada anteriormente, crea un
objeto de la clase Perro y haz que su nombre (atributo de la
clase String) contenga al valor “Pancho”.
! Imprime el atributo nombre
! Crea el método dameNombre en la clase Perro que devuelva
el atributo nombre.
! Imprime el resultado de llamar a este método.
Tipos primitivos vs tipos
referencia
! Hasta ahora las variables podían ser del tipo:
! Tipos primitivos: int, double, char, …
! Tipo de una Clase: String, Perro, …
! (arrays)
! Una variable de un tipo primitivo contiene exáctamente un
único valor del tipo especificado
! Si no se le asigna un valor al declararla, se le asigna un valor
por defecto
Referencias
Referencias
! Con la creación de objetos tenemos un nuevo tipo
! Referencias
! ¿Qué es una referencia?
! Una identificador para acceder al objeto
! Todas ocupan lo mismo
! Pero identifican a objetos de un
tipo determinado (Perro, String,…)
! Se utilizan para acceder a los atributos y llamar a los
métodos de un objeto
! El valor por defecto es null
Perro miPerro = new Perro();!
miPerro.nombre = “Pancho”;!
Perro otroPerro = new Perro();!
otroPerro.nombre = “Friki”;!
!
miPerro = otroPerro;!
Pancho
Friki
5
Métodos habituales:
Constructor
! Sirve para inicializar los atributos de un objeto al crearlo
! Se utiliza el nombre de la clase
! No devuelve nada por definición
NombreClase( parámetros ) {
…
}
Ejercicio
! Crea el constructor para la clase Perro de manera que reciba
un nombre y una edad y asigne esos valores a los atributos
correspondientes.
! Crea un objeto de la clase Perro con el nuevo constructor
Ejemplo
class Coche {
String color;
String modelo;
Coche( String uncolor, String unmodelo ) {
color = uncolor;
modelo = unmodelo;
}
public static void main(String[] args) {
Coche c = new Coche(“rojo”,”Clio”);
}
}
Métodos habituales:
Constructor
! ¿Qué sucede si no declaramos un constructor?
! Siempre tiene que existir
! Se crea uno vacío por defecto
! ¿Qué sucede en este ejemplo?
class Prueba {
Prueba(int a) {
}
public static void main(String[] args) {
Prueba c = new Prueba();
}
}
Inicialización de atributos o
variables de instancia
! Para que los atributos de los objetos que se creen siempre
tomen el mismo valor
class Cuenta {
int saldo = 100;
}
La referencia this
! Dentro de un método, la palabra reservada this representa a
la referencia al objeto actual
! Lo pasa el compilador como el primer argumento implícito
de cada llamada de un método
! Se utiliza implícitamente para hacer referencia tanto a los
atributos como a los métodos
! También se puede utilizar de manera explícita
1/31/12
6
Ejemplo
Sobrecarga de métodos
public class Perro {
String nombre;
Perro(String nombre) {
this.nombre = nombre;
}
}
! 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
Sobrecarga: Ejemplo
Ejercicio
! Crea para la clase Perro mostrada anteriormente un método
ladra que imprima GUAU y otra versión sobrecargada que
imprima el parámetro de tipo String que reciba de entrada.
class Perro {
String nombre;
int edad;
Perro(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
Perro(String nombre) {
this.nombre = nombre;
this.edad = 0;
}
}
Sobrecarga
! Métodos con el mismo nombre pero con distinto parámetros
de entrada
! ¡OJO! El tipo de retorno puede cambiar
! Pero sólo si los parámetros de entrada son distintos
! No puede haber dos métodos con el mismo nombre, los mismos
parámetros de entrada pero distinto tipo de salida.
1/31/12
7
Comentarios de: Curso de Programación en Java - Programación orientada a objetos (0)
No hay comentarios