programación orientada a objetos - laboratorio ss.oo....

7
1/31/12 1 Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual [email protected] 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. Características 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 Elementos de la POO 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

Upload: ngohuong

Post on 10-Apr-2018

218 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Programación orientada a objetos - Laboratorio SS.OO. …laurel.datsi.fi.upm.es/_media/docencia/cursos/java/2012… ·  · 2012-10-081/31/12% 1 Programación orientada a objetos

1/31/12  

1  

Programación orientada a objetos

Curso INEM. Programación en Java Santiago Muelas Pascual

[email protected]

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.

Características 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

Elementos de la POO

!   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

Page 2: Programación orientada a objetos - Laboratorio SS.OO. …laurel.datsi.fi.upm.es/_media/docencia/cursos/java/2012… ·  · 2012-10-081/31/12% 1 Programación orientada a objetos

1/31/12  

2  

¿Como funciona un programa orientado a objetos?

Cocina

No hay café

Tienda

Comprar café

Café

Buscar el café

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

!   UML (Unified modeling language): Lenguaje unificado de modelos

!   “Mapa” del código. No sirve para desarrollar sino para describir

!   Se utilizan diagramas diferentes. !   13 en UML 2.0

Declaración de clases

!   Una clase en Java debe ser declarada antes de poder ser utilizada

class nombre {! cuerpo de la clase!}!

Page 3: Programación orientada a objetos - Laboratorio SS.OO. …laurel.datsi.fi.upm.es/_media/docencia/cursos/java/2012… ·  · 2012-10-081/31/12% 1 Programación orientada a objetos

1/31/12  

3  

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

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;

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 }

Métodos

!   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

!   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

Métodos

!   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

Page 4: Programación orientada a objetos - Laboratorio SS.OO. …laurel.datsi.fi.upm.es/_media/docencia/cursos/java/2012… ·  · 2012-10-081/31/12% 1 Programación orientada a objetos

1/31/12  

4  

Esquema general

Método(a1, ..., an)

a1 a2 an

...

resultado

Argumentos

Método

Valor de retorno Puede no

devolver un resultado

Uso de un método

!   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

•  Atributos •  raza: Bulldog •  edad: 1 año •  nombre: “Pancho” •  …

•  Métodos •  ladra() •  come() •  duerme() •  …

Ejemplo

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

! Por medio del operador new

NombreClase variable = new NombreClase();

!   Se le pueden pasar parámetros ! Método constructor

!   lo veremos en las siguientes transparencias

Acceso a atributos

! Por medio del operador .

variable.atributo;

Ej: System.out.println(miPerro.nombre);

! Dentro de un método no hace falta utilizar el operador . para acceder a un atributo o variable de instancia

Page 5: Programación orientada a objetos - Laboratorio SS.OO. …laurel.datsi.fi.upm.es/_media/docencia/cursos/java/2012… ·  · 2012-10-081/31/12% 1 Programación orientada a objetos

1/31/12  

5  

Llamada a métodos

! Por medio del operador .

Ej: miPerro.ladra();

Ejemplo

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

!   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

Referencias

Pancho

Perro miPerro = new Perro();!

miPerro.nombre = “Pancho”;!

Perro otroPerro = new Perro();!

otroPerro.nombre = “Friki”;!

!

miPerro = otroPerro;!Friki

Page 6: Programación orientada a objetos - Laboratorio SS.OO. …laurel.datsi.fi.upm.es/_media/docencia/cursos/java/2012… ·  · 2012-10-081/31/12% 1 Programación orientada a objetos

1/31/12  

6  

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 ) { … }

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”); } }

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

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

Page 7: Programación orientada a objetos - Laboratorio SS.OO. …laurel.datsi.fi.upm.es/_media/docencia/cursos/java/2012… ·  · 2012-10-081/31/12% 1 Programación orientada a objetos

1/31/12  

7  

Ejemplo

public class Perro {

String nombre;

Perro(String nombre) {

this.nombre = nombre;

}

}

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

Sobrecarga: Ejemplo

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; } }

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.

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.