Logo Studenta

Utilizando clases y objetos

¡Este material tiene más páginas!

Vista previa del material en 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.

Continuar navegando