Programación Orientada a Objetos en Java
description
Transcript of Programación Orientada a Objetos en Java
![Page 1: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/1.jpg)
Programación Orientada a Objetos en Java
Unidad 2Clases y Objetos
![Page 2: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/2.jpg)
2
Temario Clases Objetos Campos Métodos Encapsulamiento Propiedades Instanciación Constructores
![Page 3: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/3.jpg)
3
OOP En Object-Oriented Programming
(OOP), o Programación Orientada a Objetos, un programa está hecho de clases, con sus campos y métodos
La creación de un programa involucra ensamblar objetos y hacerlos interactuar entre ellos
![Page 4: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/4.jpg)
4
Clases y Objetos Una clase describe un grupo de objetos que
comparten propiedades y métodos comunes Una clase es una plantilla que define qué
forma tienen los objetos de la clase Una clase se compone de:
Información: campos (atributos, propiedades) Comportamiento: métodos (operaciones, funciones)
Un objeto es una instancia de una clase
“Juan Pérez”StringVentana (tiempo de ejecución)
Ventana (tiempo de diseño)
Juan PérezEmpleadoLa MonedaCasaSodimacEmpresaObjetoClase
![Page 5: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/5.jpg)
5
Definición de una Clase
class Circulo { // campos // métodos // constructores // main()}
![Page 6: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/6.jpg)
6
Campos Los objetos almacenan información en sus
campos Existen dos tipos de campos: de instancia y
static (de clase) Campos de instancia
Hay una copia de un campo de instancia por cada objeto de la clase
El campo de instancia es accesible a través del objeto al que pertenece
Campos static (de clase) Hay una única copia de un campo static en el sistema
(equivalente a lo que en otros lenguajes es una variable global)
El campo static es accesible a través de la clase (sin necesidad de instanciar la clase)
![Page 7: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/7.jpg)
7
Campos
class Circulo { // campos double radio = 5; String color; static int numeroCirculos = 0; static final double PI = 3.1416; // métodos // constructores // main( )}
radio y color son variables de instancia, hay una copia de ellas por cada objeto Circulo
numeroCirculos y PI son variables static, están sólo una vez en memoria; PI además es constante (final): no puede modificarse
![Page 8: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/8.jpg)
8
Acceso a Campos Acceso a variables de instancia: se
utiliza la sintaxis "objeto."Circulo c1 = new Circulo();c1.radio = 5;c1.color = "rojo";// si c1 es null, // se genera una excepción NullPointerException
Acceso a variables static: se utiliza la sintaxis "clase."
Circulo.numeroCirculos++;System.out.println(Circulo.PI);
![Page 9: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/9.jpg)
9
Métodos Instrucciones que operan sobre los datos de un objeto
para obtener resultados Tienen cero o más parámetros Pueden retornar un valor o pueden ser declarados voidvoid
para indicar que no retornan ningún valor Pueden ser de instancia o static:
Un método de instancia se invoca sobre un objeto de la clase, al cual tiene acceso mediante la palabra thisthis (y sus variables de instancia son accesibles de manera directa)
Un método static no opera sobre un objeto de la clase, y la palabra thisthis no es válida en su interior
Sintaxis[static] <tipo retorno> <nombre método> (<tipo>
parámetro1, ...){ // cuerpo del método return <valor de retorno>;}
![Page 10: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/10.jpg)
10
Métodosclass Circulo { // campos double radio = 5; String color; static int numeroCirculos = 0; static final double PI = 3.1416; // métodos double getCircunferencia() { return getCircunferencia(radio); } static double getCircunferencia(double r) { return 2 * r * PI; } // constructores // main( )}
Método de instancia, tiene acceso directo a las variables de instancia del objeto sobre el que se invoca
Método static, no tiene acceso directo a variables de instancia
![Page 11: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/11.jpg)
11
Métodos de una clase pueden tener el mismo nombre pero diferentes parámetros
Cuando se invoca un método, el compilador compara el número y tipo de los parámetros y determina qué método debe invocar
Firma (signature) = nombre del método + lista de parámetros
Ejemplo:class Cuenta { public void depositar(double monto) { this.depositar(monto, "$"); } public void depositar(double monto, String moneda) { // procesa el depósito }}
Sobrecarga (Overload) de Métodos
![Page 12: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/12.jpg)
12
Acceso a Métodos Acceso a campos y métodos de
instancia: se utiliza la sintaxis "objeto."Circulo c1 = new Circulo();c1.radio = 5;c1.color = "rojo";double d = c1.getCircunferencia();// Si c1 es null, // se genera una excepción NullPointerException;
Acceso a campos y métodos static: se utiliza la sintaxis "clase."
Circulo.numeroCirculos++;int n = Circulo.getNumeroCirculos();System.out.println(Circulo.PI);
![Page 13: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/13.jpg)
13
Encapsulamiento Gady Booch define al encapsulamiento “the process of
compartmentalizing the elements of an abstraction that constitute its structure and behavior; encapsulation serves to separate the contractual interface of an abstraction and its implementation”
La clase es el espacio donde se empaquetan atributos y métodos
![Page 14: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/14.jpg)
14
Modificadores de Acceso Nivel de acceso para miembros de clases
(campos, métodos, y clases anidadas) PublicPublic: miembro es accesible en cualquier lugar en
que la clase sea accesible ProtectedProtected: miembro es accesible por subclases y
clases del mismo package PackagePackage (default): miembro es accesible por clases
del mismo package PrivatePrivate: miembro es accesible sólo al interior de la
clase Nivel de acceso para clases e interfaces
PublicPublic: clase/interfaz es accesible globalmente PackagePackage (default): clase/interfaz es accesible por
clases del mismo package
![Page 15: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/15.jpg)
15
class Circulo { // campos private double radio = 5; private String color; private static int numeroCirculos = 0; public static final double PI = 3.1416; // métodos // constructores // main( )}
Recomendación: los campos siempre deben ser privados (a menos que sean constantes)
Modificadores de Acceso
![Page 16: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/16.jpg)
16
Propiedades En Java, las propiedades se definen por la
existencia de métodos getter y setter:class Circulo { void setRadio(double radio) { ... } double getRadio() { ... } double getCircunferencia() { ... }}
Las propiedades pueden basarse en el uso de campos o no: la clase Circulo puede tener un campo radioradio, pero probablemente no tenga un campo circunferenciacircunferencia
Las propiedades de una clase pueden ser determinadas en ejecución mediante reflection (lo que es utilizado por frameworks como JSP, JSF, JPA)
Propiedad radio (read-write)Propiedad circunferencia (read-only)
![Page 17: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/17.jpg)
17
Instanciación y Referencias Los objetos se crean con el operador newnew, y se
manejan mediante referencias Los objetos se crean en el área de memoria dinámica
conocida como el heapheap Una referencia contiene la
dirección de un objeto (es similar a los punteros de otros lenguajes)
Una asignación entre objetos es una asignación de referencias
Circulo c1 = new Circulo(); Circulo c2 = c1;
Stack Heap
c1
Memoria
c2
![Page 18: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/18.jpg)
18
Paso de Parámetros En Java el paso de parámetros se
realiza "por valor" Argumentos de tipos primitivos
Si un método modifica el valor de un parámetro, este cambio sólo ocurre al interior del método; al retornar el método, se mantiene el valor original
Argumentos de tipo referencia (objetos) Al retornar el método, la referencia pasada
como parámetro sigue referenciando al mismo objeto; sin embargo, los campos del objeto podrían haber sido modificados por el método
![Page 19: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/19.jpg)
19
Un constructor es un método especial invocado para instanciar e inicializar un objeto de una clase
Invocado con la sentencia newnew Tiene el mismo nombre que la clase Puede tener cero o más parámetros No tiene tipo de retorno, ni siquiera void Un constructor no público restringe el acceso a la
creación de objetos Si la clase no tiene ningún constructor, el
sistema provee un constructor default, sin parámetros
Si la clase tiene algún constructor, debe usarse alguno de los constructores definidos al instanciar la clase (el sistema no provee un constructor default en este caso)
Constructores
![Page 20: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/20.jpg)
20
class Circulo { ...
// constructores public Circulo() { radio = 1; } public Circulo(double r) { radio = r; }
void f() { Circulo c = new Circulo(30); ... }}
Ejemplo
![Page 21: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/21.jpg)
21
La palabra thisthis puede ser utilizada en la primera línea de un constructor para invocar a otro constructorclass Circulo { private double radio; private static int numeroCirculos = 0; Circulo(double radio) { this.radio = radio; Circulo.numeroCirculos++; } Circulo() { this(10); // radio default: 10 }}
Invocación entre Constructores
![Page 22: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/22.jpg)
22
Resumen Una clase es una plantilla a partir de la cual se
instancian objetos Los objetos contienen información (en campos
de instancia y static) y comportamiento (en métodos de instancia y static)
Los miembros de instancia se utilizan con la sintaxis "objeto."
Los miembros static se utilizan con la sintaxis "clase."
Una clase puede tener varios métodos con el mismo nombre (sobrecarga), siempre que tengan diferentes parámetros
![Page 23: Programación Orientada a Objetos en Java](https://reader036.fdocuments.net/reader036/viewer/2022081520/56814d71550346895dbac9f3/html5/thumbnails/23.jpg)
23
Resumen Para instanciar una clase (crear un objeto) se
utiliza el operador newnew Los constructores son métodos especiales
invocados al instanciar una clase Los objetos se manejan a través de referencias La palabra thisthis representa una referencia al
objeto sobre el cual se invoca un método de instancia
Los modificadores de acceso controlan quién tiene acceso a los miembros de una clase