Programación Orientada a Objetos
Transcripción
Programación Orientada a Objetos
Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer [email protected] Diseño orientado a objetos El diseño orientado a objetos surge de la idea de traspasar a los sistemas de software, la organización y el funcionamiento de los sistemas reales complejos La organización de los sistemas de software en objetos refleja el análisis de la jerarquía estructural (en la disposición de los objetos) y de la jerarquía de tipos (en la organización de las clases de objetos) de los sistemas reales complejos. 1 Diseño orientado a objetos Esta organización es más fácil de mantener, es más versátil y adaptable a nuevas necesidades del mismo sistema y además permite la reutilización de las clases de objetos por otros sistemas. Paradigmas de la programación Los lenguajes de programación consisten de dos elementos: código y datos Los programas pueden organizarse conceptualmente en torno a su código o en torno a sus datos 2 Paradigmas de la programación En torno al código: Modelo orientado al proceso ¿Qué está ocurriendo? Código: serie de pasos lineales Código que actúa sobre los datos Los programas pueden volverse problemáticos a medida que se hacen más largos y complejos. Paradigmas de la programación En torno a los datos: ¿Quién está siendo afectado? Programación orientada a objetos Los programas se organizan alrededor de los datos (objetos) y de interfaces para interactuar con ellos Conjunto de datos que controlan el acceso al código 3 Programación Orientada a Objetos Se dice que la POO es más natural que la programación tradicional. Permite organizar la información de una manera que nos resulta más familiar Refleja las técnicas de la naturaleza para abordar la complejidad Abstracción Es un elemento esencial de la POO Comúnmente utilizamos la abstracción para abordar la complejidad. Por ejemplo, un automóvil que está compuesto por varios sistemas. Se aplica mediante clasificaciones jerárquicas 4 Abstracción Las abstracciones jerárquicas de sistemas complejos, se pueden aplicar a los programas de computadora Los datos se pueden transformar mediante la abstracción en objetos Cada objeto describe su comportamiento Los objetos se pueden tratar como entidades que responden a mensajes que les ordenan hacer “algo” Principios de la POO Encapsulado Mecanismo que permite unir el código junto con los datos que manipula, manteniendo a ambos a salvo de interferencias exteriores El acceso al código y los datos es controlado por una interfaz La base del encapsulado es la clase 5 Principios de la POO Herencia Es el proceso mediante el cual un objeto adquiere las propiedades de otro Mediante la herencia, un objeto sólo necesita definir aquellas cualidades que lo hacen único en su clase Principios de la POO Polimorfismo Permite que una interfaz sea utilizada por una clase general de acciones Es la propiedad que tienen algunas operaciones de tener un comportamiento diferente dependiendo del tipo de dato sobre el que se aplican Capacidad del código de un programa para ser utilizado con diferentes tipos de datos 6 Clases y objetos Una clase define la estructura y comportamiento (datos y código) que serán compartidos por un conjunto de objetos Una clase define un nuevo tipo de dato a partir del cual se pueden crear nuevos objetos Cada objeto de una determinada clase contiene la estructura y comportamiento definidos por la clase Clases y objetos Una clase es una construcción lógica, mientras que un objeto tiene una realidad física Una clase especifica métodos (funciones) y atributos (variables) Un objeto es una instancia específica de una clase 7 Composición Las variables que contienen los objetos pueden utilizarse de dos formas diferentes: Almacenar valores de datos Contener referencias a otros objetos Los objetos que contienen otros objetos se llaman objetos compuestos. Los objetos compuestos son importantes debido a que permiten representar estructuras mucho más complejas que los objetos sencillos. P. ej.: Un avión está compuesto por el tren de aterrizaje, las alas, la cabina y otros objetos que son demasiado complejos para ser representados como simples números o texto. 8 Clases en Java Las clases son la parte central de Java Una clase define un nuevo tipo de dato que puede utilizarse para crear objetos de ese mismo tipo o clase Al definir una clase, se especifican los datos que contiene y el código que opera sobre los mismos Clases en Java La forma general de una clase es: class nombreDeLaClase { tipo variable1; tipo variable2; … tipo variableN; Una clase se declara mediante la palabra clave class tipo nombreMétodo1(lista de parámetros){ //Cuerpo del método } … tipo nombreMétodoN(lista de parámetros){ //Cuerpo del método } } 9 Una clase para empezar Se definirá una clase para representar un pizarrón Nombre: Pizarron Atributos: material color ancho alto String String double double La clase Pizarron La clase debe guardarse en un archivo con el nombre Pizarron.java public class Pizarron { String color; String material; double ancho; double alto; } 10 Crear objetos de una clase Una vez definida la clase, podemos crear objetos de ese tipo desde otras clases o programas Para crear objetos, se utiliza el operador new, de la siguiente forma: Pizarron p=new Pizarron(); La variable ‘p’ representará una instancia de ‘Pizarron’ Crear objetos de una clase Pizarron p; null p p=new Pizarron(); color p material ancho alto 11 Acceso a los atributos de la clase Por medio del operador ‘.’ se hace referencia a los atributos definidos por la clase: p.color=“Verde”; System.out.println(“Color: ”+p.color); Un programa que utiliza la clase Pizarron public class PruebaPizarron { public static void main(String[] args) { Pizarron p=new Pizarron(); p.alto=1.35; p.ancho=3.23; p.color="verde"; p.material="madera"; System.out.printf("Pizarrón %s de %s que mide %4.2f x %4.2f\n", p.color,p.material,p.ancho,p.alto); } } 12 Variables de referencia a objetos Analicemos el siguiente código: Pizarron pz1,pz2; pz1=new Pizarron(); pz2=pz1; pz1 y pz2 hacen referencia al mismo objeto pz1.ancho=4.25; pz2.ancho=5.40; System.out.println(“El ancho del pizarron 1 es: ”+pz1.ancho); System.out.println(“El ancho del pizarron 2 es: ”+pz2.ancho); ¿Cuál será la salida generada por este fragmento de código? Variables de referencia a objetos Pizarron pz1,pz2,pz3; pz1=new Pizarron(); pz2=new Pizarron(); pz3=pz1; pz1.ancho=4.25; pz2.ancho=5.40; pz1=pz2; Una asignación posterior de pz1 no afecta al objeto que referenciaba con anterioridad System.out.println(“El ancho del pizarron 1 es: ”+pz1.ancho); System.out.println(“El ancho del pizarron 2 es: ”+pz2.ancho); System.out.println(“El ancho del pizarron 3 es: ”+pz3.ancho); ¿Cuál será la salida generada por este fragmento de código? 13 Variables de referencia a objetos Cuando una variable de referencia a un objeto se asigna a otra, no se crea una copia del objeto, sino una copia de la referencia Métodos Las clases están formadas por atributos (variables de instancia) y métodos Un método se define por el tipo de datos que regresa, su nombre y los parámetros que recibe: tipo nombre(lista de parámetros) { cuerpo del método } ‘tipo’ especifica el tipo de dato que devuelve el método La lista de parámetros es una sucesión de pares de tipo e identificador separados por comas 14 Agregar métodos a la clase Pizarron Algunas acciones que se realizan con un pizarrón son escribir, borrar y leer Agregamos tres métodos que nos permitan realizar dichas acciones: void escribir(String texto) void borrar() String leer() Agregar métodos a la clase Pizarron De la misma forma, podemos agregar un atributo que mantenga el texto que se escribe en el pizarrón String texto De los métodos definidos, encontramos que uno de ellos recibe un parámetro y otro regresa un valor 15 Métodos con parámetros Los métodos que reciben parámetros permiten que su funcionalidad resulte diferente cada vez que son llamados con parámetros distintos El método escribir(String texto) recibirá el texto a escribir en el pizarrón (o en la variable que contiene el texto escrito en el pizarrón) El método escribir(String texto) String texto; void escribir(String texto) { texto=texto; } La asignación texto=texto podría resultar confusa La palabra clave this String texto; void escribir(String texto) { this.texto=texto; } La palabra this puede utilizarse dentro de cualquier método para referirse al objeto actual 16 Métodos que regresan un valor En algunas ocasiones, será necesario que algún valor generado por un método de una clase se asigne a una variable para ser utilizado de manera posterior Para ésto, los métodos tienen la opción de regresar un valor al terminar se ejecución, valiéndose de la palabra clave return El tipo de datos que regresa el método debe ser igual al indicado en su declaración El método String leer( ) String leer() { return texto; } Este método simplemente regresa el valor de la variable texto Pizarron p=new Pizarron(); …. System.out.println(“El texto en el pizarrón es: ”+p.leer()); 17 Constructores Por lo general, resulta más sencillo inicializar las variables de un objeto al momento de crearlo. Esto se hace mediante un constructor Un constructor inicializa un objeto inmediatamente después de su creación El constructor es un método con el mismo nombre de la clase, que es llamado con el operador new Constructores A diferencia de otros métodos, los constructores no regresan ningún tipo de datos, aunque implícitamente regresan un objeto de su clase /* Constructor de la clase Pizarron */ Pizarron() { material=“madera”; color=“verde”; ancho=3.00; alto=2.00; texto=“”; } 18 Constructores Los constructores pueden recibir parámetros, de manera que podamos decidir la forma específica en la que se inicializa un objeto /* Constructor con parámetros de la clase Pizarron */ Pizarron(String material, String color, double ancho, double alto, String texto) { this.material=material; this.color=color; this.ancho=ancho; this.alto=alto; this.texto=texto; } 19