La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Una introducción a Java Capitulo 0. Dra. Maria Lucia Barrón Estrada Aesoria: 13:00-14:00 Oficina de posgrado Agosto-Diciembre 2007.

Presentaciones similares


Presentación del tema: "Una introducción a Java Capitulo 0. Dra. Maria Lucia Barrón Estrada Aesoria: 13:00-14:00 Oficina de posgrado Agosto-Diciembre 2007."— Transcripción de la presentación:

1 Una introducción a Java Capitulo 0. Dra. Maria Lucia Barrón Estrada luciabarron@gmail.com Aesoria: 13:00-14:00 Oficina de posgrado Agosto-Diciembre 2007

2 Contenido Instalación de Java Fundamentos del lenguaje Java Conceptos de POO con Java

3 Instalación de Java Descargar el Java SE http://java.sun.com http://java.sun.com/javase/downloads/index.jsphttp://java.sun.com Instalar el JDK 6 siguiendo las instrucciones Verificar que se hayan creado todos los directorios. Verificar la instalación con un programa de prueba

4 Directorio de archivos instalados

5 Editar, Compilar y Ejecutar un programa Crear el archivo fuente. Almacenarlo en el directorio bin con el mismo nombre de la clase y extensión java. Compilar el programa usando: > javac Nombre.java Si el programa no tiene errores se creara un archivo de bytecodes llamado Nombre.class, si tiene errores se debe editar el programa y corregirlos. Ejecutar el programa con el interprete de java: > java Nombre

6 Editar el programa

7 Compilar y ejecutar

8 Fundamentos del Lenguaje 1. Palabras reservadas y comentarios 2. Estructura de un programa 3. Tipos de datos 4. Variables. 5. Operadores. 6. Expresiones. 7. Instrucciones. 8. Bloques. 9. Control de flujo

9 Comentarios Los comentarios permiten a los programadores comunicar sus pensamientos independientemente del codigo escrito. Los comentarios NO generan codigo ejecutable, el compilador los ignora. En Java existen dos tipos de comentarios De fin de linea - inician con // Entre lineas - estan delimitados por /* */

10 Palabras Reservadas abstractdefaultgotooperatorsynchronized booleandoifouterthis breakdoubleimplementspackagethrow byteelseimportprivatethrows byvalueextendsinnerprotectedtransient casefalseinstanceofpublictrue castfinalintresttry catchfinallyinterfacereturnvar charfloatlongshortvoid classfornativestaticvolatile constfuturenewsuperwhile continuegenericnullswitch Son palabras que tienen un significado especial en el lenguaje y no pueden ser usadas como identificadoes.

11 Estructura de un programa Los programas Java tienen una estructura basica simple que se basa en la definicion de una clase. // Definicion de la clase HolaMundo.java public class HolaMundo { public static void main (String[] args) { System.out.println(Hola Mundo!"); } comentario Encabezado de la clase Cuerpo de la clase Metodo principal

12 Tipos de Datos En el lenguaje de programación Java, existen dos categorías de datos: Primitivos Referenciales Una variable de tipo primitivo contiene un valor simple del tamaño y formato apropiado para su tipo: un número, un carácter, o un valor booleano (condicional verdadero ó falso). Una variable de tipo referencial contiene una referencia a un objeto del tipo especificado o cualquier otro derivado de el.

13 Tipos de Datos Primitivos La siguiente tabla lista, por palabras reservadas, todos los tipos de datos primitivos soportados por Java, sus tamaños y formatos, y una breve descripción de cada uno: Palabra ReservadaDescripciónTamaño byteEntero c/longitud byte8-bit shortEntero corto16-bit intInteger32-bit longEntero largo64-bit floatPunto flotante simple p.32-bit doublePunto flotante doble p.64-bit charUn carácter simple16-bit booleanUn carácter booleanotrue o false

14 Datos Tipo Referencia Arreglos, clases e interfaces son datos tipo referencia. El valor de un dato tipo referencia, en contraste con uno de tipo primitivo, es que es una referencia a (una dirección de) el valor, o conjunto de valores representados por la variable. Una referencia es denominada apuntador ó dirección de memoria en otros lenguajes. Java no soporta el uso explicito de direcciones como otros lenguajes. Se emplea el nombre de variable en su lugar.

15 Datos Tipo Referencia public class MiFecha{ private int dia=1; private int mes = 1; private int año=2000 public String toString(){ return dia+-+mes+-+año; } // Podemos usar la clase MiFecha como sigue: public class PruebaMiFecha { public static void main(String[] args) { MiFecha hoy = new MiFecha(); } La variable hoy es una referencia a un objeto de tipo MiFecha.

16 Variables El nombre de variable debe ser un identificador válido, -- un número ilimitado de caracteres Unicode que comienza con una letra. No debe ser una palabra reservada, un literal booleano (true or false), ó la palabra reservada null. Debe ser única dentro de su ámbito. Un nombre de variable puede ser repetida si su declaración aparece en un ámbito diferente. El tipo de variable determina que valores puede contener y que operaciones se pueden realizar en ella. Una variable debe ser declarada para poder ser utilizada Ejemplos. int x; // define una variable de tipo entero llamada x String nombre; // define una variable de tipo string llamada nombre Object c; Bicicleta miBici;

17 Programa de Ejemplo Declaración de Variables public class MaxVariablesDemo { public static void main(String args[]) { // integers byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE; // real numbers float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; // other primitive types char aChar = 'S'; boolean aBoolean = true; }

18

19 Ámbito de las Variables El ámbito de una variable es la región de un programa dentro del cual la variable puede ser referenciada con su nombre simple. Ámbito es diferente de visibilidad, el cual aplica sólo a variables miembro y determina si la variable puede ser usada desde fuera de la clase dentro de la cual es declarada. La visibilidad se establece con un modificador de acceso.

20 Ámbito de las Variables 2 La localización de la declaración de la variable dentro del programa establece su ámbito y la coloca dentro de una de estas cuatro categorías: Variable miembro (pertenece a una clase). Variable local Parámetro de método. Parámetro de manejador de excepciones.

21 Inicialización de Variables Las variables locales y variables miembro pueden ser inicializadas con una instrucción de asignación en el momento que son declaradas. El tipo de dato debe ser acorde al valor asignado. Ej. byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE; Los parámetros de métodos y los parámetros de manejadores de excepciones no pueden ser inicializados de esta forma. El valor para un parámetro es fijado por el llamador.

22 Constantes (final) Se puede declarar una variable en cualquier ámbito para que sea final. El valor de una variable final no puede cambiar después de que ha sido inicializada. Tales variables son similares a las constantes en otros lenguajes. Para declarar una variable final, emplee la palabra reservada final antes del tipo: Ej. final int aFinalVar = 0; En el caso del ejemplo, se ha declarado e inicializado la variable en un solo paso. Se puede hacer en dos pasos si se prefiere. Hecho esto, si se intenta asignar posteriormente un valor a ésta variable, produciría un error de compilación.

23 Resumen - Variables Existen dos categorías: primitivas y de referencia. La ubicación de una declaración de variable indica implícitamente el ámbito de la variable. Hay cuatro categorías de ámbito: miembro de variable, variable local, parámetro y parámetro de manejador de excepciones. Se puede proveer un valor inicial para una variable dentro de su declaración empleando el operador de asignación (=). Se puede declarar una variable como final. El valor de una variable final no puede ser cambiado después de que ha sido inicializada.

24 Class Byte java.lang Class Byte java.lang.Object java.lang.Number java.lang.Byte All Implemented Interfaces: Serializable, Comparable Serializable ComparableByte public final class Byte extends Numberimplements Comparable Number ComparableByte The Byte class wraps a value of primitive type byte in an object. An object of type Byte contains a single field whose type is byte. In addition, this class provides several methods for converting a byte to a String and a String to a byte, as well as other constants and methods useful when dealing with a byte. Since: JDK1.1 See Also: Number, Serialized FormNumberSerialized Form

25 Campos de la clase static byteMAX_VALUE MAX_VALUE A constant holding the maximum value a byte can have, 27-1. static byteMIN_VALUE MIN_VALUE A constant holding the minimum value a byte can have, -27. static intSIZE SIZE The number of bits used to represent a byte value in two's complement binary form. static Class ClassByteTYPE TYPE The Class instance representing the primitive type byte.

26 Constructores ByteByte(byte value) Constructs a newly allocated Byte object that represents the specified byte value. ByteByte(String s) Constructs a newly allocated Byte object that represents the byte value indicated by the String parameter.String

27 Métodos de la clase byte byteValue() Returns the value of this Byte as a byte.byteValue int compareTo(Byte anotherByte) Compares two Byte objects numericallycompareToByte static Bytedecode(String nm) Decodes a String into a Byte. BytedecodeString Double doubleValue() Returns the value of this Byte as a double. doubleValue Boolean equals(Object obj) Compares this object to the specified object.equalsObject float floatValue() Returns the value of this Byte as a float.floatValue int hashCode() Returns a hash code for this Byte.hashCode int intValue() Returns the value of this Byte as an int. intValue long longValue() Returns the value of this Byte as a long.longValue static byte parseByte(String s) Parses the string argument as a signed decimal byte.parseByteString static byte parseByte(String s, int radix) Parses the string argument as a signed byte in the radix specified by the second argument. parseByteString short shortValue() Returns the value of this Byte as a short. shortValue StringString toString() Returns a String object representing this Byte's value.toString static String toString(byte b) Returns a new String object representing the specified byte.StringtoString static Byte valueOf(byte b) Returns a Byte instance representing the specified byte value.BytevalueOf static Byte valueOf(String s) Returns a Byte object holding the value given by the specified String.BytevalueOfString static Byte valueOf(String s, int radix) Returns a Byte object holding the value extracted from the specified String when parsed with the radix given by the second argument.BytevalueOfString

28 Usando la clase Byte

29

30 Operadores Un operador realiza una función en uno, dos o tres operandos. Un operador que requiere un operando es denominado operador unario. Ej. ++ es un operador unitario que incrementa en uno el valor de su operando. Un operador que requiere dos operandos es un operador binario. Ej. = es un operador binario. Se usa para asignación de valores a variables. Un operador que requiere tres operadores se denomina ternario. Existe un operador ternario ?: que es una abreviación de la instrucción if-else. Existen también tres modalidades de notación: prefija, postfija e infija.

31 Operadores Aritméticos Java soporta varios operadores aritméticos para todos los números enteros y de punto flotante: + (suma), - (resta), * (multiplicación), / (división) y % módulo. Ej. ArithmeticDemo.javaArithmeticDemo.java OperadorUso Descripción +op1 + op2Suma op1 y op2 -op1 - op2Resta op2 de op1 *op1 * op2Multiplica op1 por op2 /op1 / op2Divide op1 entre op2 %op1 % op2Calcula el remanente.

32 Operadores Aritméticos 2 Los operadores abreviados de incremento/decremento son sumarizados en la siguiente tabla: OperadorUsoDescripción ++op++Incrementa op en 1. Asigna primero, incrementa después. ++++opIncrementa op en 1. Incrementa primero, asigna después. --op--Decrementa op en 1. Asigna primero, decrementa después. ----opDecrementa op en 1. Decrementa primero, asigna después.

33 Operadores Relacionales Un operador relacional compara dos valores y determina la relación entre ellos. Por ejemplo, != retorna verdadero si los dos operandos son diferentes. A continuación una tabla de opradores: Ej. RelationalDemo.javaRelationalDemo.java Operador Uso Retorna verdadero > op1 > op2 op1 es mayor que op2 >= op1 >= op2 op1 es mayor que o igual que op2 < op1 < op2 op1 es menor que op2 <= op1 <= op2 op1 es menor que o igual que op2 == op1 == op2 op1 y op2 son iguales != op1 != op2 op1 y op2 son diferentes

34 Operadores Condicionales Los operadores relacionales frecuentemente son empleados con operadores condicionales para construir más complejas expresiones de toma de decisiones. El lenguaje de programación Java soporta seis operadores condicionales – cinco binarios y uno unario - como aparece en la siguiente tabla: Operador Uso Retorna verdadero si && op1 && op2 op1 y op2 son ambos verdad. (shortcircuit) | | op1 | | op2 o op1 o op2 es verdad. (shortcircuit) ! !op op es falso. & op1 & op2 op1 y op2 son ambos verdad. (non-shortcircuit) | op1 | op2 op1 o op2 es verdad. (non-shortcircuit) ^ op1 ^ op2 si op1 y op2 son diferentes – esto es si uno u otro de los operandos es verdad, pero no los dos.

35 Otros Operadores La siguiente tabla lista los otros operadores que el lenguaje Java soporta: Operador Descripción ?: Abreviación if - else [ ] Empleado para declarar arreglos y accesar elementos.. Usado para formar nombres cualificados ( parametros ) Delimita una lista de parámetros separados por coma ( tipo ) Convierte un valor al tipo especificado new Crea un nuevo objeto ó un nuevo arreglo instanceof Determina si su primer operando es una instancia del segundo operando. (descendencia directa o no).

36 Expresiones Variables y operadores, los cuales aparecen en las secciones previas, son bloques básicos que conforman los programas. Se pueden combinar literales, variables, y operadores para formar expresiones – segmentos de código que realizan cálculos y retornan valores. Una expresión es una serie de variables, operadores y llamadas a métodos (construidas de acuerdo a la sintaxis del lenguaje) que resultan en un valor simple. Ej. count = 1 (count == 0) x1 = -b + Math.sqrt((Math.sqr(b) + a*c)/ (2*a)) contador++ carácter = s1.charAt(0) bandera = !bandera Character.isUpperCase(aChar)

37 public class Cuadrado{ //atributo int lado; // constructor public Cuadrado (int l){ lado = l; } // metodos public int perimetro(){ return 4*lado; } public int area(){ return lado*lado; } public String toString(){ return "Cuadrado Lado = "+lado; }

38 public class PruebaCuadrado{ public static void main(String[] args){ Cuadrado c = new Cuadrado(5); System.out.println(c); System.out.println("El perimetro es "+ c.perimetro()); System.out.println("El area es "+ c.area()); }

39 Instrucciones (Sentencias) Una instrucción forma una completa unidad de ejecución. Los siguientes tipos de expresiones pueden ser convertidas en instrucciones finalizando la expresión con un punto y coma, ( ; ). Expresiones de asignación. Cualquier uso de ++ ó --. llamadas a métodos. Expresiones de creación de objetos.

40 Bloques Un bloque es un grupo de cero o más instrucciones entre llaves balanceadas (que abren y cierran) y que puede ser usada en cualquier sitio donde una simple instrucción sea permitida. El listado siguiente muestra dos bloques del programa MaxVariablesDemo, conteniendo una instrucción simple: MaxVariablesDemo if (Character.isUpperCase(aChar)) { System.out.println("The character " + aChar + " is upper case."); } else { System.out.println("The character " + aChar + " is lower case."); }

41 Instrucciones de Control de Flujo Se pueden emplear instrucciones de control de flujo para: condicionalmente ejecutar instrucciones, repetidamente ejecutar bloques de instrucciones y cambiar el flujo secuencial de control. Ej: char achar;... if (Character.isUpperCase(aChar)) System.out.println("The character " + aChar + " is upper case."); else System.out.println("The character " + aChar + " is NOT a upper case.");

42 If/Else La instrucción if / else permite al programa ejecutar selectivamente otras instrucciones, basando la selección en el resultado de una expresión booleana. La forma general sería: Ej: IfElseDemo.javaIfElseDemo.java if (expression) statement if (expression) statement else statement

43 Ejemplos usando if if (height <= MAX) adjustment = 0; else adjustment = MAX-height; if (total < 7) System.out.println(Total menor que 7); if (firstCh != a && limit < MAX) count++; else count = count /2;

44 class IfElseDemo { public static void main(String[] args) { int testscore = 76; char grade; if (testscore >= 90) { grade = 'A'; } else if (testscore >= 80) { grade = 'B'; } else if (testscore >= 70) { grade = 'C'; } else if (testscore >= 60) { grade = 'D'; } else { grade = 'F'; } System.out.println("Grade = " + grade); }

45 La Instrucción Switch Se emplea la instrucción switch para condicionalmente ejecutar instrucciones basadas en expresiones de enteros. Ej: SwitchDemo.javaSwitchDemo.java switch (expresion) { case expresion : estatutos; break; case expresion : estatutos; break; // mas casos default : estatutos }

46 La instrucción switch evalúa su expresión, y ejecuta la instrucción (case) adecuada. La expresion debe ser de tipo char, byte, short o int. La expresion de cada caso, debe ser del mismo tipo de la expresion del switch. La expresion de cada caso debe ser UNICA. La seccion default es opcional y se ejecuta cuando ningun caso coincide con la expresion. Instrucción break después de cada caso (case). Cada instrucción break termina el bloque de switch, y el flujo de control continúa con la primera instrucción que sigue después del bloque de switch. Si no se colocaran instrucciones break, el cursor de ejecución seguiría ejecutando otros bloques case.

47 Ejemplo usando switch char opcion; System.out.println(Selecciona la opcion deseada (A o B)); opcion = Keyboard.readChar(); switch (opcion){ case A : System.out.println(Seleccionaste la opcion A); break; case b : // acepta b o B case B : System.out.println(Seleccionaste la opcion B); break; default : System.out.println(Opcion Invalida); }

48 class SwitchDemo { public static void main(String[] args) { int month = 8; switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Invalid month.");break; }

49 class SwitchDemo2 { public static void main(String[] args) { int month = 2; int year = 2000; int numDays = 0; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; case 2: if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0) ) numDays = 29; else numDays = 28; break; default: System.out.println("Invalid month."); break; } System.out.println("Number of Days = " + numDays); }

50 Instrucción For La instrucción for provee una forma compacta de iterar sobre un rango de valores. La forma general de la instrucción for puede ser expresada como esto: for (initialization; termination; increment) { estatuto } La expresion initialization es una expresión que inicializa el bucle. Es ejecutada una vez al comienzo del bucle. La expresión termination determina cuando terminar el bucle. Esta expresión es evaluada al tope de cada iteración del bucle. Cuando la expresión evalúa a falso, el bucle termina. La expresión increment es invocada después de cada iteración. Todos esos componentes son opcionales. Los bucles for son frecuentemente utilizados para iterar sobre los elementos de un arreglo, o los caracteres de un String. Ej. ForDemo.javaForDemo.java

51 Ejemplo usando for // imprime los primeros n numeros enteros for (int i=0; i<=n; i++) System.out.println(i); // imprime los primeros n numeros enteros pares for (int i=0; i<=n; i++) System.out.println((i*2)); // suma los primeros n numeros enteros for (int i=0; i<=n; i++) sum = sum + i; System.out.println(sum);

52 class EnhancedForDemo { public static void main(String[] args){ int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) { System.out.println("Count is: " + item); }

53 While y Do-While Se debe usar una instrucción while para continuamente ejecutar un bloque de instrucciones mientras una condición permanezca verdadera. La sintaxis general de while es: while (expression) { estatuto } Primero, la instrucción while evalúa la expresión, la cual debe retornar un valor booleano. Si la expresión retorna verdadero, entonces la instrucción while ejecuta las instrucciones dentro del bloque asociado. El proceso se mantiene ininterrumpido hasta que la expresión retorne falso. Ej. WhileDemo.javaWhileDemo.java

54 Ejemplo usando while // imprime los primeros n numeros enteros int i=0; while (i<=n) { System.out.println(i); i++; } // ciclo infinito while (true) { System.out.println(i); i++; } while (!bandera) { … }

55 Do - While Esta instrucción es muy similar a la anterior, con la diferencia de que la evaluación de la instrucción se hace al final, no al principio. Esto permite ejecutar por lo menos una vez el bloque asociado sin evaluar la expresión. do estatuto; while (expresionBooleana); Ej: DoWhileDemo.javaDoWhileDemo.java

56 Ejemplo usando do while // imprime aun cuando la condicion es falsa int i=10; do { System.out.println(i); i++; } while (i<=5) {

57 class DoWhileDemo { public static void main(String[] args){ int count = 1; do { System.out.println("Count is: " + count); count++; } while (count <= 11); }

58 Manejo de Excepciones El lenguaje de programación Java provee un mecanismo conocido como excepciones para ayudar a los programas a reportar y manejar errores. Cuando un error ocurre, el programa arroja una excepción, lo cual significa que el flujo normal de ejecución a quedado interrumpido y que el entorno de runtime intenta encontrar un manejador de excepciones – un bloque de código que pueda manejar un tipo particular de error. El manejador de excepciones puede intentar recuperar del error ó, si determina que el error es irrecuperable, proveer una finalización gentil del programa. Hay tres instrucciones que juegan un rol en el manejo de excepciones: Try, Catch y Finally. try { statement(s) } catch (exceptiontype name) { statement(s) } finally { statement(s) } En otro apartado ampliaremos este tema.

59 Instrucciones de Ramificación El lenguaje de programación Java soporta tres instrucciones de ramificación: Break Continue Return.

60 Instrucción Break La instrucción break tiene dos formas: con etiqueta ó sin etiqueta. La forma sin etiqueta es empleada para terminar el bucle interno en que se encuentre, mientras que la forma con etiqueta permite terminar una instrucción marcada con una etiqueta. Sin etiqueta Ej: BreakDemo.javaBreakDemo.java Con etiqueta Ej: BreakWithLabelDemo.javaBreakWithLabelDemo.java

61 Instrucción Continue La instrucción continue se emplea para saltar (obviar) la iteración actual de un bucle for, while ó do-while. La forma sin etiqueta salta hasta el final del bucle interno y evalúa la expresión booleana que controla el bucle, básicamente obviando el remanente de esta iteración del bucle. La forma con etiqueta salta (obvia) la iteración actual con la etiqueta dada. A continuación unos ejemplos con cada una de las formas: Sin etiqueta Ej: ContinueDemo.javaContinueDemo.java Con etiqueta Ej: ContinueWithLabelDemo.javaContinueWithLabelDemo.java

62 Instrucción Return Se emplea la instrucción return para salir del método actual. El flujo de control retorna a la instrucción que sigue al método llamador. La instrucción return tiene dos formas: una que retorna un valor y otra que no lo hace. Para retornar un valor, simplemente coloque el valor (o una expresión que calcule el valor) después de la palabra reservada return: return ++count; El tipo de dato del valor retornado debe ser acorde con el tipo de dato de retorno del método (en su declaración). Cuando un método es declarado void, use la forma de return que no retorna valor. return;

63 Conceptos de Programación Orientada a Objetos ¿Que es un objeto? Es un ente que posee estado y comportamiento. A un objeto en particular se le llama instancia. - Estado: característica o condición del objeto. - Nombre, color, ruedas, engranaje actual, etc. - Comportamiento: acciones que realiza el objeto. - Ladrar, mover cola, acelerar, frenar

64 Encapsulación Empacar las variables de un objeto dentro de la custodia protectiva de sus métodos es denominado encapsulación. Este es el ideal por el que se esfuerzan los modeladores de sistemas POO, aunque muchas veces no se logra.

65 Ventajas de la Encapsulación Modularidad: el código fuente para un objeto puede ser escrito y mantenido independientemente del código fuente de otros objetos. Ocultamiento de información: un objeto tiene una interfaz pública que otros objetos pueden usar para comunicarse con él. El objeto puede mantener información privada y métodos que pueden ser cambiados en cualquier momento sin afectar los otros objetos que dependen de él. Se logra un funcionamiento tipo caja negra.

66 ¿Qué es un Mensaje? Los programas creados para resolver problemas complejos del mundo real generalmente constan de muchos objetos que interactúan muchas veces de forma compleja. Los objetos de software interactúan y se comunican con cada uno por medio de enviar y recibir mensajes entre sí. Cuando el objeto A quiere que el objeto B ejecute uno de los métodos de B, el objeto A envía un mensaje al objeto B.

67 Ventajas que Proveen los Mensajes 1. El comportamiento de un objeto es expresado a través de sus métodos. así (aparte del acceso directo a variables) el envío de mensajes soporta todas las posibles interacciones entre objetos. 2. Los objetos no necesitan estar en el mismo proceso o aún en el mismo equipo para enviar y recibir mensajes entre ellos.

68 ¿Qué es una Clase? En el mundo real, uno se encuentra con muchos objetos de un mismo tipo. Ej, carros, bicicletas, etc. Empleando terminología orientada a objetos, podríamos decir que su objeto bicicleta es una instancia de la clase de objetos conocidos como bicicletas. Las bicicletas tienen algún estado (engranaje actual, cadencia actual, dos ruedas) y comportamiento (cambio de engranaje, frenar) en común. Sin embargo, cada estado de cada bicicleta es independiente y puede ser diferente de las otras bicicletas.

69 Definición de Clase En el software Orientado a Objetos, es también posible tener muchos objetos del mismo tipo que comparten características: rectángulos, empleados, registros, video clips, y así sucesivamente. Al igual que los fabricantes de bicicletas, se puede tomar ventaja del hecho que los objetos de la misma clase son similares y se puede crear un modelo o definición para esos objetos. Una clase es un plano, definición, o prototipo, que define las variables y los métodos comunes a todos los objetos de un cierto tipo.

70 Ejemplo de Clase La clase para nuestro ejemplo de bicicleta declararía las variables de instancia necesarias para contener el engranaje actual, la velocidad actual, y así sucesivamente, para cada objeto de bicicleta. Variables de instancia

71 La clase también declararía y proveería implementaciones para los métodos de instancia que permiten al ciclista cambiar engranaje, frenar, y cambiar la velocidad de pedal, como es mostrado en la figura siguiente: métodos de instancia

72 Ejemplo de Clase 2 public class HolaMundo { public static void main(String[] args) { System.out.println(Hola Mundo!"); } Una clase en Java, puede contener un metodo especial llamado main, que es donde inicia la ejecucion. En este ejemplo, la clase HolaMundo no contiene variables de instancia ni metodos de instancia. Solo contiene el metodo estatico main.

73 Instancias de la Clase Después que se ha creado la clase bicicleta, se pueden crear cualquier número de objetos bicicleta a partir de la clase. Cuando se crea una instancia de una clase, el sistema reserva suficiente memoria para el objeto y todas sus variables de instancia. Cada instancia obtiene su propia copia de todas las variables de instancia definidas en la clase.

74 Variables de Clase (Atributos) En adición a las variables de instancia, las clases pueden definir variables de clase. Una variable de clase contiene información que es compartida por todas las instancias de la clase. Si un objeto cambia la variable, ésta cambia para todos los objetos de ése tipo. public class Circulo { public int x; private static int contador = 0; private float y = 10000.00F; private String nombre = Circulo; } La variable contador contiene un solo valor, el cual es compartido por todos los objetos de la clase Circulo.

75 Métodos de Clase Una clase puede también declarar métodos de clase. Un método de clase se invoca directamente a partir de la clase, y no a traves de un objeto. La clase Math, contiene una serie de metodos de clase, los cuales son invocados usando el nombre de la clase y el nombre del metodo. class Prueba{ public static void main(String[] args) { System.out.println(La raiz cuadrada de 27 es + Math.sqrt(27)); } El metodo sqrt de la clase Math es estatico y por lo tanto se invoca usando el nombre de la clase

76 ¿Qué es Herencia? En Java existe una jerarquia de clases que tiene como raiz a la clase Object. Nuevas clases pueden ser definidas usando clases ya existentes. Las clases creadas a partir de una clase serían denominadas subclases o clase derivada. La clase usada para derivar una nueva clase se le llama clase padre o superclase. Los objetos son creados usando clases.

77 Condiciones de Herencia Cada subclase hereda estado (en la forma de atributos) y métodos a partir de la superclase. Las subclases pueden agregar nuevas variables y métodos a aquellos que heredan de la superclase o bien pueden redefinir (sobreescribir) los metodos existentes para especializar su comportamiento.

78 Condiciones de Herencia Continuación No estamos limitados a solo una capa de herencia. El árbol de herencia, o jerarquía de clases, puede ser tan profundo como se necesite. En general, en la medida que se desciende en las capas de una jerarquía, más especializado es su comportamiento.

79 Beneficios de la Herencia Las subclases ofrecen comportamientos especializados a partir de la base de los elementos comunes que provee la superclase. A través del uso de la herencia, los programadores pueden reusar código en la superclase muchas veces. Los programadores pueden implementar superclases denominadas clases abstractas que definen comportamientos genéricos. La superclase abstracta define y podría parcialmente implementar el comportamiento, pero mucho de la clase es indefinida y no implementada. Otros programadores se encargarían de especificar los comportamientos con subclases especializadas.

80 La Clase Object La clase Object está en el tope de la jerarquía de clases, y cada clase es su descendiente (directa ó indirectamente). Una variable de tipo Object puede contener una referencia a cualquier objeto, tal como una instancia de una clase o un arreglo. Object provee comportamientos que son requeridos para todos los objetos ejecutandose en la Maquina Virtual Java (Java Virtual Machine). Por ejemplo, todas las clases heredan de Object el método toString, el cual retorna una representación del objeto.


Descargar ppt "Una introducción a Java Capitulo 0. Dra. Maria Lucia Barrón Estrada Aesoria: 13:00-14:00 Oficina de posgrado Agosto-Diciembre 2007."

Presentaciones similares


Anuncios Google