Descarga la aplicación para disfrutar aún más
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.
Compartir