Prévia do material em texto
1
Ing. Marcelo Parisholon sw
Utilizando Clases y Objetos
2
Ing. Marcelo Parisholon sw
Introducción POO
POO
Resolver problemas entorno al concepto de objectos como el elemento
básico de sus programas.
Estos objetos se caracterizan por poseer propiedades y
comportamientos.
3
Ing. Marcelo Parisholon sw
Introducción POO
Ejemplo
Los objetos del mundo fisico pueden modelarse facilmente
como objetos de software utilizando propiedades como
datos y los comportamientos como métodos
Objecto Propiedades Comportamiento
Tipo de transmisión doblar
fabricante frenar
color acelerar
Peso rugir
Color dormir
Esta hambriento ? cazar
Domesticado o Salvaje
Auto
Leon
4
Ing. Marcelo Parisholon sw
Encapsulación
Encapsulacion
Es una manera de ocultar ciertos elementos de la implementación de
una cierta clase.
Colocando un limite alrededor de las propiedades y metodos de
nuestra clase podemos podemos prevenir a nuestros programas
que tengan efectos colaterales por los intentos que que otros
programas cambien las variables de una manera inesperada.
5
Ing. Marcelo Parisholon sw
Clases y Objetos
Clases
Pueden ser pensadas como una Plantilla, un Prototipo o un Plano de un
Objeto.
Es la estructura fundamental de la POO.
2 Tipos de miembros:
Campos (propiedades o atributos)
Especifica los datos definidos para la clase
Metodos.
Especifican las operaciones
6
Ing. Marcelo Parisholon sw
Clases y Objetos
Objecto
Esta compuesto por un conjunto de datos ( propiedades) las cuales
describen las caracteristicas esenciales del objeto y un conjunto de
metodos (comportamiento) que describe como el objeto se comporta.
Un objeto es una instancia de una clase.
7
Ing. Marcelo Parisholon sw
Clases y Objectos
Para diferenciar Clases y Objetos, veamos el siguiente
ejemplo:
Objecto Auto A Objecto Auto B
Numero de Chapa ABC 111 XYZ 123
Color Azul Rojo
Fabricante Mitsubishi Toyota
Velocidad Actual 50 km/h 100 km/h
Metodo Acelerar
Metodo Doblar
Metodo FrenarMetodos de Instancia
Clase Auto
Variables de Instancia
8
Ing. Marcelo Parisholon sw
Clases y Objetos
Las Clases proveen el beneficio de la reusabilidad.
Los programadores puede utilizar una clase una y otra vez
creando objetos.
9
Ing. Marcelo Parisholon sw
Variables de Clase
Las Clases estan compuesta de
Variables de Instancia
Metodos de Instancia
Variables de Clase ( variables miembro estáticas)
Variables que pertenecen a la clase como un todo.
Esto significa que tiene el mismo valor para todos los objetos de la misma clase.
10
Ing. Marcelo Parisholon sw
Variables de Clase
Por Ejemplo,
Objecto Auto A Objecto Auto B
Numero de Chapa ABC 111 XYZ 123
Color Azul Rojo
Fabricante Mitsubishi Toyota
Velocidad Actual 50 km/h 100 km/h
Variables de Clase Cantidad = 2
Metodo Acelerar
Metodo Doblar
Metodo FrenarMetodos de Instancia
Clase Auto
Variables de Instancia
11
Ing. Marcelo Parisholon sw
Instanciación de una Clase
Para crear un objeto o instancia de una clase utilizamos el
operador new.
Por ejemplo, si queremos crear una instancia de la clase
String, utilizamos el siguiente codigo,
String str2 = new String(“Hello world!”);
o su equivalente,
String str2 = "Hello";
12
Ing. Marcelo Parisholon sw
El operador new
Asigna memoria para el objeto y retorna una referencia a la su
ubicación en memoria.
Cuando se crea un objeto se invoca al constructor de la clase.
El constructor
Es un metodo donde se colocan todas las inicializaciones y tiene el
mismo nombre que la clase.
Instanciación de una Clase
13
Ing. Marcelo Parisholon sw
Metodos
Metodo
Es una pieza de codigo indendiente que puede ser llamada por un
programa principal para realizar una función especifica.
Características de los métodos:
Pueden retornar un valor o ningun valor.
Puede aceptar tantos parametros como necesito o no tener
parámetros. Los parametros tambien son llamados Argumentos.
Luego que el método ha finalizado su ejecución, esta retorna a la
ejecución desde donde fué invocado.
14
Ing. Marcelo Parisholon sw
Porque utilizar Metodos?
El corazón de la resolución efectiva de un problema es la
descomposición.
Podemos realizarlo especificando metodos que resuelvan
una parte especifica del problema.
Tomar un problema y partirlo en piezas pequeñas y
manegables es critico para escribir programas grandes.
15
Ing. Marcelo Parisholon sw
Para ilustrar como llamar metodos, utilizaremos la clase
String con un ejemplo.
En la documentacion de Java API podrá encontrar todos los
metodos disponibles para la clase String.
Luego crearemos nuestras propias clases pero por ahora
untilizaremos las disponibles.
Para llamar un metodo de instancia escribimos lo siguiente.
nameOfObject.nameOfMethod( parameters );
Utilizando Clases y Objetos
16
Ing. Marcelo Parisholon sw
Utilizando Clases y Objetos
Ejemplo de dos métodos del API de la clase String,
17
Ing. Marcelo Parisholon sw
Creando y utilizando objetos,
String str1 = new String("Hello“);
char x = str1.charAt(0); //will return the character H
//and store it to variable x
String str2 = new String("hello“);
//this will return a boolean value true
boolean result = str1.equalsIgnoreCase( str2 );
Utilizando Clases y Objetos
18
Ing. Marcelo Parisholon sw
Pasando Parametros
Paso por Valor
Cuando ocurre un paso por valor, el metodo toma una copia del valor
de la variable pasada como argumento del metodo. El metodo no
puede modificar accidentalmente el argumento original auque
modifique su valor durante los calculos.
Todos los datos primitivos son pasados por valor a los metodos.
19
Ing. Marcelo Parisholon sw
Paso por Valor
20
Ing. Marcelo Parisholon sw
Paso de Parametros
Paso por Referencia
Cuando un paso por referencia ocurre, la referencia al objeto es
pasada en la llamada al metodo. Esto significa que el metodo hace
una copia de la referencia a la variable pasada como argumento.
Sin embargo, a diferencia del paso por valor, el metodo puede
modificar el objeto actual referenciado, esto es posible ya que
ambas referencias ( la pasada como argumento en la llamada y la
recibidad como parametro por el metodo ) apuntan a lo mismo.
21
Ing. Marcelo Parisholon sw
Paso por Referencia
22
Ing. Marcelo Parisholon sw
Paso por Referencia
23
Ing. Marcelo Parisholon sw
Llamando Métodos Estáticos
Metodos Estaticos
Son metodos que pueden ser invocados sin instanciar la clase
( significa que puede ser invocado sin haber creado una clase con el
operador new ).
Metodos Estaticos toman a la clase como un todo y no afectan
particularmente a una instancia ( u objeto ) de una clase.
Los metodos estaticos se distinguen de los metodos de instancia en la
definición del metodo en la clase por la palabra reservada static.
Para invocar un método estático:
NombreClase.nombreMetodoEstatico(parametros);
24
Ing. Marcelo Parisholon sw
Ejemplos de métodos estáticos que ya utilizamos en
nuestros ejemplos son,
//prints data to screen
System.out.println(“Hello world”);
//converts the String 10, to an integer
int i = Integer.parseInt(“10”);
//Returns a String representation of the integer argument as an
//unsigned integer base 16
String hexEquivalent = Integer.toHexString( 10 );
Llamando Métodos Estáticos
25
Ing. Marcelo Parisholon sw
Alcance de una Variable
Alcance (scope)
Determina donde una variable es accesible dentro del programa.
Determina el tiempo de vida de la variable o cuanto tiempo existira en
memoria.
El alcance es determinado por el lugar en el programa donde la
variable es declarada.
Para simplificar las cosas, piensen que el alcance (scoper)
es algo que esta encerrado entre corchetes {…}. El bloque
de codigo encerrado se denomina bloque interno y el bloque
que lo contiene bloque externo.
26
Ing. Marcelo Parisholon sw
Scope de una variable
El alcance/visibilidad/scopede una variables:
Esta dentro del bloque donde esta esta declarada, comenzando desde
el punto de la declaracion hasta que se cierra el bloque con una }.
27
Ing. Marcelo Parisholon sw
Ejemplo 1
28
Ing. Marcelo Parisholon sw
Ejemplo 1
El codigo presentado incluye 5 alcances indicados por
lineas y letras.
Dadas las variables i,j,k,m y n, y los 5 alcances A,B,C,D y E,
identificamos los alcances para cada variable:
El alcance de la variable i es A.
El alcance de la variable j es B.
El alcance de la variable k es C.
El alcance de la variable m es D.
El alcance de la variable n es E.
29
Ing. Marcelo Parisholon sw
Ejemplo 2
30
Ing. Marcelo Parisholon sw
Ejemplo 2
En el metodo main, el alcance de las variables es,
ages[] - scope A
i en B - scope B
i en C – scope C
En el metodo test, los alcances de las variables son:,
arr[] - scope D
i en E - scope E
31
Ing. Marcelo Parisholon sw
Alcance de una Variable
Cuando declaramos variables, solo una puede ser
declarada con el mismo identificados dentro del mismo
alcance.
Significa que si declaramos de la siguiente manera,
{
int test = 10;
int test = 20;
}
el compilador generara un error por no tener nombres
unicos dentro del bloque.
32
Ing. Marcelo Parisholon sw
Alcance de una Variable
Sin embargo, se puede tener 2 variables con el mismo
nombre si no estan declarados en el mismo bloque. Por
ejemplo:
int test = 0;
System.out.print( test );
//..some code here
{
int test = 20;
System.out.print( test );
}
33
Ing. Marcelo Parisholon sw
Guia de Codificacion
Evite tener variables del mismo nombre declaradas dentro
de un método para evitar confusiones.
34
Ing. Marcelo Parisholon sw
Casteo de Tipos
Casting de Tipos
Convertir un tipo de datos a otro tipo de datos
Se analizará:
Casteo de datos con tipos de datos primitivos
Casteo de Objetos
35
Ing. Marcelo Parisholon sw
Casting de Tipos Primitivos
El casteo entre tipos primitivos permite convertir un valor de
un determinado tipo a otro tipo primitivo.
Comunmente ocurre entre tipos numericos.
Hay un tipo primitivo que no podemos castearlo, y es el tipo
de datos boolean.
Tipos de casteo:
Implicito
Explicito
36
Ing. Marcelo Parisholon sw
Casting Implicito
Para ilustrar casteo implicito, veamos un ejemplo:
Supongamos que queremos almacenar un dato entero a
una variable del tipo double.
int numInt = 10;
double numDouble = numInt; //implicit cast
En este ejemplo, la variable destino (double) tiene la
capacidad de almacenar un valor mayor al que se intenta
asignar, por lo cual el dato es implicitamente casteado a
double.
37
Ing. Marcelo Parisholon sw
Casting Implicito
Otro ejemplo:
int numInt1 = 1;
int numInt2 = 2;
//el resultado es implicitamente casteado a double
double numDouble = numInt1/numInt2;
38
Ing. Marcelo Parisholon sw
Casting Explicito
Cuando convertimos datos que son de tipos mas grandes que
otros tipos mas pequeños, debemos utilizar el casteo explicito.
Un casteo explicito tiene la siguiente forma:
(tipoDato)valor
donde,
tipoDato - es el nombre de un tipo de datos al cual esta convirtiendo
valor - es una expresion que resultara en un valor del tipo de dato origen
39
Ing. Marcelo Parisholon sw
Ejemplo de Casting Explicito
double valDouble = 10.12;
int valInt = (int)valDouble;
//convert valDouble to int type
double x = 10.2;
int y = 2;
int result = (int)(x/y); //typecast result of operation to int
40
Ing. Marcelo Parisholon sw
Casting de Objetos
Instancias de Clases tambien puede ser convertidas a
instancias de otras clases, con una restriccion: Las clases
origen y destino deben estar relacionadas por Herencia; una
de las clases debe ser una subclase de la otra.
El tema de herencia sera cubierto en detalle mas adelante.
Casteo de objetos es analogo a conversion de valores de
tipos primitivos an tipo mas grande(amplio), algunos
objetnos pueden no necesitar ser casteados explicitamente.
41
Ing. Marcelo Parisholon sw
Casting de Objetos
Para castear utilizamos,
(Nombre_Clase)objeto
donde,
Nombre_Clase, es el nombre de la clase destino
objeto, es una referencia al objeto origen
42
Ing. Marcelo Parisholon sw
Ejemplos de Casting de Objetos
El siguiente ejemplo castea una instancia de la clase
VicePresident para instanciar una clase Employee;
VicePresident es una subclase de la clase Employee con
mas información, como por ejemplo define que
VicePresident tiene privilegios de acceso a los baños
ejecutivos.
Employee emp = new Employee();
VicePresident veep = new VicePresident();
// no es necesario castear cuando se asigna a superclases
emp = veep;
// debe utilizar casteo explicito para asignar a subclases
veep = (VicePresident)emp;
43
Ing. Marcelo Parisholon sw
Convertir Tipos Primitivos a Objetos y vice
versa
No es posible bajo ninguna circunstancia castear un objeto
a tipo de dato primitivo o vice versa.
Una alternativa, el paquete java.lang incluye clases que
corresponden con cada tipo primitivo: Float, Boolean, Byte,
y otros. Las denominan clases Wrapper (Emboltorio).
44
Ing. Marcelo Parisholon sw
Convertir Tipos Primitivos a Objetos y vice
versa
Clases Wrapper
La mayoria de estas clases tienen el mismo nombre que los tipos de
datos, excepto que comienzan en Mayuscula(Short para short,
Double para double, y asi de manera semejante)
Dos clases tienen nombre de clase diferentes a los tipos de datos:
Character para variables char e Integer para variables int.
Utilizando clases que corresponden con cada tipo primitivo es posible
crear objetos que almacenen el mismo valor.
45
Ing. Marcelo Parisholon sw
Convertir Tipos Primitivos a Objetos y vice
versa
Ejemplos:
La siguiente instruccion crea una instancia de la clase Integer con el valor 7801
(primitive -> Object)
Integer dataCount = new Integer(7801);
Las siguiente instruccion convierte un objeto Integer a su valor en tipo primitivo
int. El resultado es un valor int de 7801.
int newCount = dataCount.intValue();
Una conversion que comunmente se utiliza es la conversion de String a tipos
numericos, como por ejempo a int (Object->primitive)
String pennsylvania = "65000";
int penn = Integer.parseInt(pennsylvania);
46
Ing. Marcelo Parisholon sw
Comparación de Objetos
En discusiones previas, conocimos los operadores de
comparación -igual, distinto, mayor que, menor que y otros-
.La mayoria de estos operadores funcionan solamente
sobre tipos primitivos, no sobre objetos.
Las excepciones a esta regla son los operadores de
igualdad: == (igual) y != (distinto). Cuando son aplicados
sobre objetos estos no funcionan como puede esperarlo a
primera vista. En vez de verificar si un objeto tiene el mismo
valor que otro objeto, ellos determinan si ambos operadores
referencian al mismo objeto..
47
Ing. Marcelo Parisholon sw
Comparación de Objetos
Ejemplo:
1 class EqualsTest
2 {
3 public static void main(String[] arguments) {
4 String str1, str2;
5 str1 = "Free the bound periodicals.";
6 str2 = str1;
7 System.out.println("String1: " + str1);
8 System.out.println("String2: " + str2);
9 System.out.println("Same object? " + (str1 == str2));
10 str2 = new String(str1);
11 System.out.println("String1: " + str1);
12 System.out.println("String2: " + str2);
13 System.out.println("Same object? " + (str1 == str2));
14 System.out.println("Same value? " + str1.equals(str2));
15 }
16 }
48
Ing. Marcelo Parisholon sw
Comparación de Objetos
La salida del programa es la siguiente:
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? true
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? false
Same value? True
49
Ing. Marcelo Parisholon sw
Comparing Objects
NOTA sobre Strings:
Dado el codigo:
String str1= “Hello”;
String str2 = “Hello”;
Estas dos referencias str1 and str2 apuntaran al mismo objeto.
Los Literales String estan optimizados en Java, si creamos un string
utilizando un literal y luego utilizamos otro literal con los mismos
caracteres, java reconoce esta situacion retornando una reverencia
al mismo objeto String.
Ambos string son el mismo objeto, debera encontrar su propia manera
de crear objetos separados.
50
Ing. Marcelo Parisholon sw
Determinando la Clase de un Objeto
Como determinar de que clase es un objeto? Aqui una
manera de determinarlo.
Supongamos que tenemos el siguiente objeto:
SomeClassName key = new SomeClassName();
Ahora discutiremos las dos maneras que exitsten para
conocer el tipo de objeto apuntado por la referencia key.
51
Ing. Marcelo Parisholon sw
El Metodo getClass()
El metodo getClass() retorna un objeto Class ( donde Class
en si mismo es una clase) que posee un metodo llamado
getName().
Alternativamente, getName() retorna un string que
representa el nombre de la clase.
Por ejemplo,
String name = key.getClass().getName();
52
Ing. Marcelo Parisholon sw
El Operador instanceOf
El operador instanceOf tiene dos operadores: una
referencia a un objeto a la izquierda y un nombre de clase a
la derecha.
La expresion retorna true o false dependiendo si es objeto
es una instancia de la clase o una de las subclases de dicha
clase.
Por ejemplo,
boolean ex1 = "Texas" instanceof String; // true
Object pt = new Point(10, 10);
boolean ex2 = pt instanceof String; // false
53
Ing. Marcelo Parisholon sw
Resumen
Clases y Objetos
Variables de Instancia
Variables de Clase
Instanciacion de una Clase
Métodos
Métodos de Instancia
Paso de Variables a Metodos (por Valor, por Referencia)
Métodos Estáticos
Alcance de una variable
Casting(objetos, tipos primitivos)
Conversión de tipos primitivos a objetos y vice versa.
Comparación de Objetos
Determinación de la Clase de un Objeto.