Generalidades de Java. un lenguaje de Programación Orientado a Objetos (POO); y una plataforma de ejecución para programas escritos en lenguaje Java

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Generalidades de Java. un lenguaje de Programación Orientado a Objetos (POO); y una plataforma de ejecución para programas escritos en lenguaje Java"

Transcripción

1 Generalidades de Java ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Generalidades de Java Java es: un lenguaje de Programación Orientado a Objetos (POO); y una plataforma de ejecución para programas escritos en lenguaje Java Java fue desarrollado por un equipo de investigadores de SUN Microsystems. En la actualidad Java está a cargo de la empresa Oracle. 2 Utilidades de Java Java permite: Construir aplicaciones: programas computacionales que apoyan el trabajo o resuelven problemas específicos de usuarios (funcionan stand-alone). Construir applets: programas de menor envergadura que se ejecutan al momento de cargar una página WEB (son ejecutados por un browser). Nota: Las applets al día de hoy no se usan, debido a que existían problemas de seguridad y han sido reemplazadas por otras tecnologías, por ej: HTML5. 3 Desarrollo y ejecución genérico de aplicaciones Desarrollo y ejecución genérico de aplicaciones Desarrollo y ejecución de aplicaciones en Java Gráficamente Código fuente Compilador para Sistema Operativo Código objeto (y ejecutable) Código fuente Compilador para Sistema Operativo Se genera el bytecode Código objeto (y ejecutable) Windows, Linux, OSX, Solaris, etc. Windows, Linux, OSX, Solaris, etc. Este es ejecutado por el interprete de Java (JVM) Nota: Se debe crear un código objeto y compilación distinta para cada uno de los sistemas operativos, con sus respectivas restricciones. 4 5 Nota: En este caso el código fuente es para todos los sistemas operativos igual, ya que es la JVM (Máquina Virtual de Java) la encargada de interpretar el bytecode. 6 Desarrollo y ejecución de aplicaciones en Java Java Virtual Machine (JVM) Componentes de Java Gráficamente: En Java: Bytecode JVM Windows JVM Linux JVM OSX JVM Solaris Java se compone de: Compilador (Java-compiler) Intérprete (Java) Biblioteca de clases (Java API o Application Programmer Interface) Utilitarios de desarrollo (para debug, documentación, etc.) Lo anterior se encuentra en el SDK (Software Development Kit) de Java distribuido por Oracle

2 Componentes de Java Java en distintos tamaños Es importante destacar que para poder desarrollar aplicaciones, no sólo basta con tener el compilador (ej: NetBeans) sino también el JDK (Java Developer Kit), también disponible por Oracle. JME: Java Micro Edition JSE: Java Standard Edition JEE: Java Enterprise Edition Elementos de una aplicación simple en Java ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Cómo es una app en Java? Cómo es una app en Java? Cómo es una app en Java? Código fuente Compilación Ejecución Los elementos presentados anteriormente son bastante antiguos, actualmente los IDE de Java son capaces de generar todos los pasos anteriores dentro de la misma plataforma. Ejemplo del HolaCurso: package holacurso; public class HolaCurso public static void main(string[] args) System.out.println("Hola curso!"); Código en Github Componentes de Java Tipos de datos Tipos de datos: primitivos Generación de código fuente Compilación La compilación genera como resultado el bytecode. Ejecución La Máquina Virtual de Java se encarga de realizar el proceso de ejecución, con ello quién desarrolla no se debe preocupar del Sistema Operativo. Los tipos de datos utilizados por aplicaciones en Java se clasifican en dos categorías: Primitivos: sirven para definir variables que guardan valores numéricos, lógicos y caracteres unitarios. Clases e interfaces: sirven para definir variables que almacenan tipos de datos estructurados y las funciones asociadas. Java soporta los siguientes tipos de datos primitivos: Entero Punto flotante Lógico Carácter

3 Tipos de datos: primitivos Tipos de datos: primitivos Tipos de datos: primitivos Familia de datos enteros: byte, short, int y long Familia de datos punto flotante: float y double Familia de datos carácter (char) y lógico (boolean) Tipo Almacena Rango byte 8 bits [-128, 127] short 16 bits [ , 32767] int 32 bits [ , ] long 64 bits [ , ] Tipo Almacena Rango float Punto flotante de 32 bit 7 dígitos significativos (10-46,10 38 ) double Punto flotante de 64 bit 15 dígitos significativos (10-324, ) Tipo Almacena Rango char Carácter Unicode --- boolean Lógico False y true Tipos de datos: String Operadores básicos Operadores básicos El String es un tipo de dato que permite trabajar con cadenas de caracteres, por ejemplo: Hola mundo Mario Mora 12/10/99 (como texto, en el curso siguiente se conocerán los datos tipo date.) A Es una clase, no un tipo primitivo, pero se utiliza en forma muy similar a estos últimos. Posteriormente se hablará del concepto de clase. 22 Operador de asignación: = Operadores numéricos: Binarios: + (suma), - (resta), * (multiplicación), / (división), % (módulo o resto de la división entera) Unarios: ++ (autoincremento), -- (autodecremento) 23 Operadores relacionales: == (igual a)!= (distinto de) < (menor que), <= (menor o igual que), > (mayor que), >= (mayor o igual que). Operadores lógicos: && (AND) (OR)! (NOT) 24 Estructuras de control Estructuras de control Estructuras de control Decisión simple: Si hay sol entonces me coloco polera. Si tengo sueño entonces duermo. Decisión compleja: Si estoy aburrido entonces juego, sino estudio. (Si es lunes entonces estudio, sino voy a clases); sino duermo. Decisión simple: Decisión compleja: if ( condición ) instrucción; Nota: Cuando dentro de una estructura de control existe sólo 1 instrucción entonces no es necesario el uso de llaves. if ( condición ) else instrucción 1-1; instrucción 2-1; Iteración Mientras-repetir (while): Mientras tenga sed, bebo. Mientras tenga sueño, duermo. Iteración Hacer-mientras (do-while): Bebo mientras tenga sed. Duermo mientras tenga sueño. Cuál es la principal diferencia entre ambas estructuras de control?

4 Estructuras de control Comentarios y documentación Identificadores Iteración Mientras-repetir: Iteración Hacer-mientras: while ( condición ) do instrucción 1; instrucción 1; instrucción 2; instrucción 2; while ( condición ); La principal diferencia es que en el primer caso primero se evalúa la condición y posteriormente se realiza la acción; en cambio, en el segundo caso primero se realiza la acción y posteriormente se evalúa si se vuelve a ejecutar. 28 Se pueden incluir comentarios en el código usando los siguientes marcadores: // comentario hasta fin de línea /* comentario de múltiples líneas */ /** comentario */ 29 JAVA es sensible a mayúsculas y minúsculas: Es decir, JAVA considera distinto Nombre y nombre. Un identificador válido consiste en una combinación de de letras, dígitos y el carácter underscore. No puede comenzar por un dígito. Ejemplos: Válidos: edad, nota_alumno, _peso, estadosalud No válidos: 1ero, km/hora, Alumno(s), peso total 30 Declaración de variables Declaración de variables Métodos de utilidad Una variable se declara según el formato: tipo identificador [=valor], identificador[=valor ]; Por ejemplo: int a, b, c ; double peso = 7.05 ; char letra = T ; byte edad = 20, veces = 3 ; 31 Convención: el identificador de una variable de tipo primitivo comenzará en minúsculas. Por ejemplo: edad, edadalumno, estadocivil, eselultimo. La declaración de variables es considerada una instrucción, por ende debe finalizar con punto y coma ( ; ). Toda variable utilizada deberá ser declarada, de lo contrario el compilador indicará un error. 32 Despliegue de datos ( escribir ): System.out.print( ); System.out.println( ); Por ejemplo: System.out.println( Hola ); System.out.println( Hola + nombre); Nota: No olvidar que los anteriores ejemplos se denominan instrucciones, y las instrucciones siempre finalizan con ; 33 Métodos de utilidad Estructura de una aplicación Ejemplo de programa no interactivo Convertir de String a número: Byte.parseByte( ) Short.parseShort( ) Integer.parseInt( ) Float.parseFloat( ) Double.parseDouble( ) Por ejemplo: /* Ejemplo de una aplicación */ public class IdentificadorClase Definición de la clase public static void main (String[ ]idarreglo) // Fin método main // Fin clase Método main package factorial; public class Factorial public static void main(string[] args) int número, i=1, fact=1; número = 3; while( i <= número ) fact = fact * i; i++; System.out.println( "El factorial de " + número + " es " + fact ); Definición de la clase Método main Declaración e identificador de variables x = Integer.parseInt( 50 ); y = Integer.parseInt( dato ) + 40; /* Variable dato ya declarada e inicializada */ Código en Github

5 Valores literales Valores literales Características generales de una aplicación simple Son valores que aparecen explícitamente en el código fuente. Por ejemplo: S : tipo char S, Juan, 100 : tipo String package factorial; public class Factorial public static void main(string[] args) int número, i=1, fact=1; número = 3; Literal Las aplicaciones simple: Se estructuran como una clase que tiene un método main. El nombre de la clase debe ser el mismo que el del archivo que la contiene. 150 : tipo int : tipo double 150.0f : tipo float 0150: tipo int octal while( i <= número ) fact = fact * i; i++; System.out.println( "El factorial de " + número + " es " + fact ); 0x150: tipo int hexadecimal Código en Github Traspaso de datos por parámetro Traspaso de datos por parámetro Traspaso de datos por parámetro El método main puede recibir parámetros desde la línea de comandos del intérprete. Estos se almacenan en las posiciones del arreglo de String indicado en la declaración del método. Un arreglo es una colección de datos de un mismo tipo, referenciada por un nombre. Cada dato ocupa una posición dentro de la colección. La cantidad total de posiciones es fija, y son accesibles por medio de un subíndice, que se inicia en cero (0). package factorialconparametros; public class FactorialConParametros public static void main(string[] args) int numero, i=1, fact=1; numero=integer.parseint(args[0]); while(i<=numero) fact*=i; i++; System.out.println("El factorial de "+numero+" es "+ fact); Código en Github Importante: Recordar que para el caso anterior se deberá usar: Llamado por consola. Invocación desde otras clases o apps Consideraciones importantes Consideraciones importantes Consideraciones importantes Java requiere la declaración de variables antes de que sean utilizadas. El tipo de una variable no puede ser modificado. Se dice que es un lenguaje fuertemente tipificado. Java distingue entre mayúsculas y minúsculas. Las expresiones matemáticas se evalúan con precedencia de * y / sobre + y -. Las instrucciones se organizan de acuerdo con las estructuras de control: secuencia decisión : if( cond ) else Iteración: do while( cond ) o while( cond ) Las instrucciones se separan mediante un punto y coma ( ; ). Los bloques son instrucciones agrupadas mediante paréntesis de llave (y). Se utilizan en decisiones e iteraciones, y no llevan punto y coma al final (después de la llave de cierre). Documentar los programas (comentarios explicativos). Adoptar convención para definición de identificadores: Variables: primeraletraenminúscula Clases: PrimeraLetraEnMayúscula Métodos: primeraletraenminúscula

6 Arreglos en Java Los arreglos son colecciones ordenadas de datos del mismo tipo. Ejemplos: Arre[0] Arre[1] Arre[2] Arre[k] Arreglo de bytes Arreglos en Java Cada arreglo se reconoce por un identificador y cada dato se almacena en una posición indexada. Un arreglo de largo N, tiene posiciones indexadas mediante enteros desde 0 hasta N-1. Nombre de la colección Arre[0] Arre[1] Arre[2] Arre[k] Posición Arreglos y matrices hola Casa Auto No Arreglo de Strings Arre[0] Arre[1] Arre[2] Arre[k] hola Casa Auto No ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Arre[0] Arre[1] Arre[2] Arre[k] Arreglo de doubles 47 Contenido de la colección en la posición k-ésima 48 Creación de arreglos Creación de arreglos Creación de arreglos Se debe definir una variable que identifique al arreglo, indicando la naturaleza de los datos que se almacenarán: Define que la variable edades referenciará un arreglo de enteros. Define que la variable que almacenará el tamaño de la colección. tipo[ ] variable; ó tipo variable[ ]; int[] edades; edades = new int[8]; int tamaño = 20; int[] edades; edades = new int[tamaño]; Luego se debe instanciar el arreglo indicando el largo que tendrá, y asignarlo a la variable: Instancia un arreglo de enteros de 8 posiciones. Asigna el arreglo instanciado a la variable edades. El arreglo se instancia con la cantidad de posiciones definidas por la variable tamaño. (tamaño debe ser > 0) variable = new tipo[ entero ]; Creación de arreglos Creación de arreglos Recorrido de arreglos Forma abreviada de creación de arreglos: La definición de variable, instanciación del arreglo y su asignación a la variable puede realizarse en una sola instrucción. Ejemplo: tipo[ ] variable = new tipo[ entero ]; double[] nota = new double[4]; 52 Asignación y creación literal de arreglos: También es posible instanciar arreglos escribiéndolos como literales en el código fuente: int[] nota = 23, 14, 55, 18 ; nota[0] nota[1] nota[2] nota[3] Instancia un arreglo de enteros de tamaño 4 53 Se puede utilizar la propiedad length del arreglo para controlar procesos iterativos sobre el mismo: int i; long[] números; números = new long[ 20 ]; i=0; while( i < números.length ) System.out.println( números[ i ] ); i++; 54 6

7 Recorrido de arreglos Consideraciones Consideraciones Cuando se recorre arreglos se presenta un error típico: Tratar de acceder una posición inexistente del arreglo, por ejemplo, la posición 10 de un arreglo de largo 10. Cuando lo anterior ocurre, se genera en tiempo de ejecución una excepción denominada: ArrayIndexOutOfBoundsException. Se debe recordar que los arreglos de tamaño n son recorridos desde la posición 0 a la posición n-1. Una vez instanciado un arreglo, no puede modificarse su largo. length es una propiedad o atributo del arreglo que contiene el largo del mismo. double[] nota; nota = new double[4]; System.out.println( El largo es + nota.length ); Las propiedades o atributos se consultan sin paréntesis al final, a diferencia de los métodos. Sobre el arreglo de parámetros declarado al inicio del método main es necesario destacar: Es instanciado por Java al momento de ejecutarse la aplicación. El arreglo se instancia con un largo igual a la cantidad de parámetros traspasados en la línea de comandos. El arreglo de parámetros debe ser declarado como arreglo de Strings. En este curso no se hará uso de dicho arreglo. public static void main(string arg[ ]) throws IOException Consideraciones Matrices Matrices Los arreglos se instancian. La instanciación ocurre de tres formas: Un arreglo puede tener más de una dimensión. Java permite crear matrices de la siguiente forma: cuando se utiliza el operador new. cuando el arreglo es declarado literalmente. al ejecutar la aplicación, en el caso del arreglo de parámetros del método main. Los arreglos de más de una dimensión se denominan matrices. El caso más común es la matriz bidimensional: tipo[ ] [ ] variable = new tipo[ entero1 ] [ entero2 ]; Por ejemplo: Los arreglos son referenciados desde una variable. Todas las posiciones del arreglo son del mismo tipo. El atributo length permite acceder al largo del arreglo. Y tratar de acceder una posición inexistente del arreglo genera una excepción ArrayIndexOutOfBoundsException int[ ][ ] utilidad; utilidad = new double[10][15]; También pueden ser creadas de forma literal (al igual que los arreglos): double[ ][ ] uti = -1, 7, 15, 3, 0, 2, 4, -3, 12 ; uti[1][2] contiene un Matrices Matrices Acceso a posiciones Todas las posiciones de una matriz son de un mismo tipo. La matrices se identifican por su nombre, y se caracterizan además por sus dimensiones. Las dimensiones de una matriz no se pueden modificar mediciones Matriz mediciones de datos enteros, de dimensiones 3 x En el caso de las matrices de dos dimensiones, llamaremos a la primera dimensión fila, y a la segunda, columna. Representaremos visualmente en nuestros ejemplos las filas hacia abajo y las columnas hacia el lado. La primera fila será la fila 0 y la primera columna, la columna 0. Filas Columnas Las posiciones de una matriz se acceden independientemente (una a una). Se utiliza un subíndice para especificar cada dimensión. En una matriz de dos dimensiones, el primer subíndice representa la fila, y el segundo, la columna. mediciones mediciones[0][0] contiene un mediciones[0][3] contiene un mediciones[2][0] contiene un 1 mediciones[1][2] contiene un mediciones[2][1] contiene un 0 etc 63 7

8 Particularidades Regla general En rigor Java no provee arreglos multidimensionales. Java los implementa mediante arreglos de arreglos. Esto permite crear, por ejemplo, matrices bidimensionales con cantidades de posiciones distintas por fila: int[][] nota = -1,7,15, 3, 2, 4,-3,12, 3; 64 Aplicaciones interactivas ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Las variables almacenan datos del mismo tipo que han sido definidas. Existen algunas excepciones, en el cual las variables pueden recibir datos de otros tipos: Promoción automática de tipos Casting 66 Promoción automática de tipos Promoción automática de tipos Casting Es una de las formas de cambiar el tipo de un valor. También es llamada conversión por ensanchamiento. Una variable de un tipo de dato puede recibir un valor de otro tipo si: los dos tipos son compatibles(*), y el tipo de destino es de mayor jerarquía que el tipo de origen (*)Tipos compatibles: los tipos numéricos son compatibles entre sí. Ejemplo de promoción automática de tipos: dato tipo int es almacenado en una variable double. int x = 4; x y double y; y = x; Casting: permite convertir un valor de un tipo de mayor jerarquía a otro de menor jerarquía (funciona si y sólo si el tipo de menor jerarquía puede contener al valor convertido). El casting tiene prioridad sobre los operadores +,-,* y /. Formato: var1 = (tipo de var1) var2 double j=1.0; int j=200; int i; byte i; i = (int) j; i = (byte) j; Casting Incorrecto: el máximo valor que puede contener una variable byte es 127. La variable i queda con valor incorrecto. 69 Evaluación de expresiones numéricas Promoción automática de byte y short Resultado de una operación Regla general: La operación de dos números de un mismo tipo, genera un resultado también del mismo tipo. Se exceptúan de la regla anterior las operaciones sobre datos tipo byte o short. int a=10, b=4, c; c = a + b ; int a=10, b=4, c; c = a / b ; = 14 int 10 / 4 = 2 int La operación de dos datos de tipo byte o short, genera como resultado un int. byte i=2, j=3, k; k = i + j ; = 5 int Error: no puede almacenarse un int en una variable byte. byte i=2, j=3; int k; k = i + j ; = 5 int El resultado de cualquier expresión es del tipo correspondiente al del operando de mayor jerarquía, en el orden: double float long int Resultado 5.0 (Double) int i=10, k; double j=2.0; k = i / j ; Error: no puede almacenarse un int en una variable byte. Automáticamente es promovido a double antes de realizarse la operación

9 Ejemplos Ejemplos Precisión de los cálculos Suponer variable x definida como double: x = 10 / 4; x toma valor 2.0 double Suponer variable x definida como float: x = 10 / 4; // x toma valor 2.0 float Las operaciones aritméticas con tipos enteros (byte, short, int o long), se realizan con alta precisión. x = 10.0 / 4; x = 10.0f / 4; x = (double) 10 / 4; x = (double) (10/4); x toma valor 2.5 double x toma valor 2.5 double x toma valor 2.5 double x toma valor 2.0 double x = 10.0 / 4; x = 10.0f / 4; x = (float) 10 / 4; x = (double) (10/4); Error: x no puede almacenar valor 2.5 double x toma valor 2.5 float x toma valor 2.5 float Error: x no puede almacenar valor 2.0 double Las operaciones aritméticas con tipos de punto flotante (float o double), se realizan con menor precisión. Ejemplos*: 0.1 sumado 10 veces = sumado 100 veces = sumado 1000 veces = (*) pruebas efectuadas con variable double 75 Precisión de los cálculos Aplicación interactiva Aplicación interactiva Las operaciones aritméticas con valores float o double fallan en la evaluación de igualdades: package factorialinteractivo; import java.io.* ; public class FactorialInteractivo public static void main(string[] args) throws IOException Debe explicitarse package factorialinteractivo; qué se hará con eventuales import java.io.* ; errores de I/O public class FactorialInteractivo public static void main(string[] args) throws IOException Permite crear el objeto de la clase BufferedReader identificado como con el nombre lector, que se encargará de leer. if( var1 == var2 ) System.out.println( Son iguales ); else System.out.println( No son iguales ); Solución: determinar si la diferencia en valor absoluto de las variables es menor que un error predeterminado: if( Math.abs( var1 - var2 )< ) System.out.println( Son iguales ); else System.out.println( No son iguales ); int número, i=1, fact=1; BufferedReader lector = new BufferedReader( new InputStreamReader( System.in ) ); String ingresado; System.out.println("Ingrese número para cálculo de factorial: "); ingresado = lector.readline( ); número = Integer.parseInt( ingresado ); while( i <= número ) fact = fact * i; i++; System.out.println( "El factorial de " + número + " es " + fact ); Código en Github int número, i=1, fact=1; BufferedReader lector = new BufferedReader( new InputStreamReader( System.in ) ); String ingresado; Indica a Java System.out.println("Ingrese número para cálculo de factorial: "); dónde ingresado = lector.readline( ); El objeto lector se encarga de leer datos del encontrar las número = Integer.parseInt( ingresado ); usuario. Para leer invoca el método readline( ). clases requeridas while( i <= número ) fact = fact * i; i++; System.out.println( "El factorial de " + número + " es " + fact ); Código en Github Importación de clases desde API-Java Componentes de la API de Java Componentes de la API de Java Java API package java.lang Algunos de los packages de la Java API son: Algunos de los packages de la Java API son: class Factorial3 class String class System class Math class Double class Long class Integer class Byte class Short Clases de java.lang se importan automáticamente java.applet : construcción de applets. java.beans : desarrollo y reutilización de componentes. java.awt : componentes visuales. java.rmi : invocación remota de métodos. java.sql : soporte para JDBC. java.security : firma de applets y codificación de datos. class Float... java.io : entrada y salida de datos. java.text : manejo de distintos tipos de textos. package java.io java.lang : clases de uso común. java.util : clases varias de utilidad. import java.io.* class InputStreamReader class BufferedReader class IOException... java.math : soporte para tipos numéricos con SQL. Otras clases deben importarse explícitamente, indicando el nombre del package que las contiene package

10 Objeto lector Método parseint Método readline Puede utilizarse las veces que sea necesario:... String dato; int base, expo; BufferedReader usuario = new BufferedReader (new InputStreamReader( System.in ) );... System.out.println( Ingrese base : ); dato = usuario.readline( ); base = Integer.parseInt( dato ); System.out.println( Ingrese exponente : ); dato = usuario.readline( ); expo = Integer.parseInt( dato );... El método parseint de la clase Integer retorna el equivalente a int de un String recicibido como parámetro. Este valor es asignado a la variable número. Argumento o parámetro actual número = Integer.parseInt( ingresado ); Clase Integer Método de la clase Integer (los métodos llevan paréntesis al final) El método readline() del objeto lector retorna un String ingresado por el usuario. Este valor es asignado a la variable ingresado. Método del objeto lector (este método no recibe parámetros, pero de todas formas lleva paréntesis) ingresado= lector.readline(); Objeto de la clase BufferedReader, también llamado instancia de la clase BufferedReader Paso de parámetros Ejercicios Ejercicios El valor retornado por un método puede usarse como parámetro actual de otro método:... int base, expo; BufferedReader usuario = new BufferedReader( new InputStreamReader( System.in ) );... System.out.println( Ingrese base : ); base = Integer.parseInt( usuario.readline( ) ); System.out.println( Ingrese exponente : ); expo = Integer.parseInt( usuario.readline( ) ); usuario.readline() retorna un String... que es recibido como parámetro por el método parseint de la clase Integer Implemente una aplicación que dado un número por el usuario, se le indique si es positivo, negativo o cero. Desarrolle un programa que dado un número (entero) por el usuario muestre por pantalla todos los divisores de dicho número, por ejemplo, si se ingresa el número 2, sus divisores son el 1 y el 2. Desarrollar una aplicación que dada una cantidad de números (n, con ciclos iterativos de petición y que terminan cuando el usuario ingrese 0) guarde el impar mayor y el par menor y luego los muestre por pantalla. Utilizando arreglos, genere una aplicación para guardar 50 números y determinar cuantos de ellos son pares y cuantos impares. Desarrolle un programa que cuente la cantidad de letras ingresadas en un arreglo, estas deben ser contadas de forma que las letras repetidas se consideren sólo una vez Ejercicios Ejercicios De un arreglo A de caracteres (letras) de largo máximo 50, invertir sus valores en un arreglo B del mismo tamaño. Luego verificar si la palabra es palíndrome (es decir se lee igual hacia adelante y hacia atrás) comparando los dos arreglos simultáneamente. Ordenar un arreglo de tamaño 10 de enteros ingresados por el usuario de menor a mayor, no se permite el uso de arreglos auxiliares. 88 Teniendo una matriz de números enteros de dimensiones 10 x 10 (cuadrada) se pide desarrollar un programa para recorrer dicha matriz mostrando su diagonal principal. Implementar una aplicación para encontrar el número mayor y el menor de una matriz de enteros, debe considerar que el tamaño de la matriz, así como la matriz son dados por el usuario y validados en la aplicación. En todos los ejercicios anteriores debe crear y llenar las colecciones. 89 Manejo de String ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso 10

11 String en Java Valor null Método equals String es una clase, no un tipo primitivo. Las variables de tipo String, en cualquier instante, pueden contener: Un String (ej. Hola, 11/11/2011, 123,, etc. ) El valor null (cuando la variable no contiene un String). Observaciones: Cuando se instancia un arreglo de String, sus posiciones se inicializan automáticamente en null. El valor null puede ser asignado a cualquier variable String. Para saber si una variable de tipo String contiene el valor null: String x; //Aquí x puede o no recibir un valor if( x == null ) System.out.println( No contiene String ); else System.out.println( Sí contiene String ); Para saber si una variable de tipo String (no null) contiene un determinado texto, debemos usar el método equals sobre la variable: String x; //Aquí x recibe un valor if( x.equals( Esternocleidomastoideo ) ) System.out.println( Igual ); else System.out.println( Distinto ); Método equals Método equals Método equalsignorecase Para establecer si dos variables String (no null) contienen el mismo valor: Para establecer si dos variables String (no null) contienen valores distintos, se niega el resultado del método equals: El método equals distingue entre mayúsculas y minúsculas. String x = Esternocleidomastoideo ; String y = EsternocleidoMastoideo ; String x, y; //Aquí x e y reciben valores if( x.equals( y ) ) System.out.println( Igual ); else System.out.println( Distinto ); String x, y; //Aquí x e y reciben valores if(! x.equals( y ) ) System.out.println( Distintos ); else System.out.println( Iguales ); Si no deseamos hacer distinción entre mayúsculas y minúsculas debemos utilizar el método equalsignorecase. if( x.equals( y ) ) System.out.println( Iguales ); else System.out.println( Distintas ); if( x.equalsignorecase( y ) ) System.out.println( Iguales ); else System.out.println( Distintas ); Consideración muy importante Otros métodos Secuencias de escape Para aplicar cualquiera de los métodos anteriores sobre una variable, es necesario que ésta no sea null. Para verificar esta condición: Investigar sobre el funcionamiento de los métodos: Substring El backslash ( \ ) se utiliza dentro de de String literales para iniciar secuencias de escape. String x, y; //Aquí x e y pueden o no recibir un valor if( x!= null ) if( x.equals( y ) ) System.out.println( Igual ); // o en forma alternativa (en este orden): if( x!= null && x.equals( y ) ) System.out.println( Igual ); Trim replaceall split Secuencias de escape importantes: \n : cambio de línea \t : tabulación \ : comilla simple \ : comilla dobe \\ : backslash

12 Clases y objetos Clases y objetos Una clase es un tipo al cual pertenecen objetos o instancias de la clase. Una clase es el plano que permite construir objeto de un determinado tipo. Introducción a la POO Clase Persona: Los objetos de esta clase tienen nombre, capacidad de leer, dormir y respirar Estas son instancias de la clase Persona. Conceptualmente las clases, en la POO, especifican: Atributos: datos que almacena el objeto (y que caracterizan su estado). Comportamiento: funcionalidades o tareas que realizan los objetos. ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Ejemplos de clases Clases y objetos Clases y objetos Clase Cuenta Corriente: Clase Rectángulo: Atributos: Número cuenta Nombre titular Saldo Atributos: Alto Ancho Comportamiento: Girar Depositar Comportamiento: Calcular área Calcular perímetro Una clase en el lenguaje Java tiene esencialmente: Variables de instancia: son variables que permiten almacenar los atributos de un objeto. Métodos: procedimientos que implementan el comportamiento de los objetos de la clase. Además Java permite definir: Constructores: procedimientos que se ejecutan en el momento de la instanciación del objeto (tienen el mismo nombre de la clase). Los objetos deben instanciarse (mediante el operador new). Cada objeto se accede desde una variable de referencia. Cada objeto tiene su propia identidad. Objeto (tiene una mivariable dirección de memoria distinta a la de la variable) Variable de referencia (tiene una dirección de memoria) Instanciación de objetos Instanciación de objetos Instanciación de objetos Para utilizar un objeto primero se debe definir una variable que lo referenciará, con el formato: Clase variable Luego se debe crear el objeto (instancia de clase), de la siguiente forma: variable = new Constructor (lista de parámetros); Es posible realizar todo en una sola instrucción: Clase variable = new Constructor (lista de parámetros); Ejemplo: recordemos la instanciación de un objeto de la clase BufferedReader: Operador para instanciar Tipo de la variable de (palabra reservada) referencia. Asignación BufferedReader lector = new BufferedReader( ) Crea una instancia de Nombre de la variable la clase BufferedReader de referencia. Importante: La lista de parámetros son datos que se ha especificado como requeridos para crear el objeto. Una misma clase puede tener distintas especificaciones de parámetros requeridos para su instanciación, o podría no requerirlos. Los datos de la lista de parámetros se separan con comas

13 Instanciación de objetos Instanciación de objetos Instanciación de objetos Constructor: Es aquel que se invoca al momento de instanciar un objeto: Aquí estamos llamando al constructor de la clase BufferedReader BufferedReader lector = new BufferedReader( ) Suponer la clase CajaAhorro que permite mantener el registro de depósitos y giros de una cuenta. Tiene los siguientes métodos: depositar(int monto) : permite abonar el valor de monto a la cuenta. girar(int monto): permite registrar un giro por el valor de monto. obtenersaldo(): retorna el saldo de la cuenta (valor int). obtenertransacciones(): retorna la cantidad total de transacciones (giros y depósitos) que se han hecho sobre la cuenta (valor int). Y el siguiente constructor: CajaAhorro() : inicializa la cuenta con saldo y contador de transacciones en cero. Se creará una instancia de CajaAhorro y se accesarán sus métodos Ejemplo de una clase Instanciación de objetos Ejemplo de una clase import java.io.*; public class CajaAhorro public class Banco private int saldo; Variables de instancia private int transacciones; public CajaAhorro() saldo = 0; Constructor (es esto se verá más adelante) transacciones = 0; public void depositar( int monto ) saldo = saldo + monto; transacciones++; public void girar( int monto ) saldo = saldo - monto; transacciones++; public int obtenersaldo() return saldo; public int obtenertransacciones() return transacciones; Código en Github Métodos public class EjemploObjetos public static void main(string[] args) CajaAhorro cta1; Declaración de la variable de referencia cta1 = new CajaAhorro(); Instancia de la clase y asignación cta1.depositar(1000); cta1.depositar(500); Llamado a método cta1.girar(300); int saldo = cta1.obtenersaldo(); int trans = cta1.obtenertransacciones(); Llamado a método System.out.println("El saldo es" + saldo ); System.out.println("Se han hecho" + trans + "transacciones"); Código en Github public static void main(string[] args) throws IOException BufferedReader op = new BufferedReader(new InputStreamReader(System.in)); String opc; int cant,opcion; CajaAhorro cuenta = new CajaAhorro(); boolean continuar = true; while(continuar) System.out.println("Seleccione una opción"); System.out.println("1.-Depositar 2.-Girar 3.-Cons. Saldo 4.- Salir"); opcion= Integer.parseInt( op.readline() ); switch (opcion) case 1: System.out.println("Ingrese la Cantidad a depositar"); cant= Integer.parseInt( op.readline() ); cuenta.depositar(cant); break; case 2: System.out.println("Ingrese la Cantidad a girar"); cant=integer.parseint( op.readline() ); cuenta.girar(cant); break; Código en Github Ejemplo de una clase Posibilidades de la POO Posibilidades de la POO case 3: System.out.println("Saldo :" + cuenta.obtenersaldo()); System.out.println("Trans.:" + cuenta.obtenertransacciones()); break; case 4: continuar = false; Usar de forma repetida clases previamente implementadas. Ejemplos: BufferedReader String Definir e implementar nuevas clases. La POO (Programación Orientada a Objetos) se basa en cuatro conceptos, que serán estudiados a lo largo de este curso: Abstracción Encapsulamiento Herencia Polimorfismo Código en Github

14 Abstracción Abstracción Abstracción Un objeto es capaz de desempeñar una función de forma completamente independiente del contexto en que éste es utilizado. En otras palabras, en cualquier ámbito (incluso diferente a aquel en que fue creado), un objeto expone las mismas propiedades y sus operaciones se comportan de la misma forma. Abstracción Por ejemplo, Goofy se comporta como Goofy en la pelicula de Goofy y también en la película La Sirenita Encapsulamiento Herencia Polimorfismo Un objeto es capaz de responder a peticiones sin exponer la forma en que estas son ejecutadas. En otras palabras, la invocación de una operación sobre un objeto gatilla un proceso cuyo efecto es logrado sin dar a conocer sus estructuras internas, ni sus algoritmos. Encapsulamiento Una clase puede ser generada a partir de otra clase preexistente, heredando las propiedades de esta última. Herencia Objetos de un mismo (súper)tipo pueden realizar una misma operación de forma distinta. Polimorfismo Ejercicio grupal Componentes de una clase Crear una aplicación que sea capaz de crear una serie de personas (nombre, apellido, edad). Debe crear la clase persona con su constructor respectivo. Leer sus datos y guardar sólo la que tenga mayor edad. (Esto requiere que no almacene todas las personas) Muestre sus datos por pantalla. Implementación y uso de clases Una clase en Java se compone de: Variables de instancia Constructor Métodos A los anteriores se les conoce también como miembros de la clase. 124 ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso

15 Variables de instancia Variables de instancia Variables de instancia Son los atributos de la clase. Se declaran fuera de cualquier constructor o método. Dependen de la naturaleza del problema que se esté resolviendo. Ejemplo, En la clase persona: RUT, nombre, fecha de nacimiento. Ejemplo, En la clase automóvil: Patente, marca, modelo, año fabricación. Declaración: Tipo de dato public class CajaAhorro private int saldo; public int transacciones; Modificador de visibilidad Se declaran fuera de cualquier constructor o método. El modificador de visibilidad determina quién puede tener acceso a la variable de instancia: Mayor visibilidad: Menor visibilidad: Todo el mundo Cualquier clase Sólo constructores y (cualquier otra clase) Cualquier del mismo métodos de la misma subclase package clase Public Protected (Por omisión) Private Variables de instancia Variables de instancia Variables de instancia Acceso a una variable public desde una aplicación u otra clase: varrefobjeto.varinstancia public class Punto public int x; Punto origen = new Punto(0,0); public int y; public Punto(int a, int b) origen.x = 20; x=a; origen.y = -30; y=b; System.out.println(origen.x); int z = origen.x * origen.y; Métodos origen.y = origen.x; Clase Punto Fragmento aplicación Variables private no pueden ser accesadas desde otras clases o aplicaciones. public class Punto public int x; Punto origen = new Punto(0,0); public int y; public Punto(int a, int b) origen.x = 20; x=a; origen.y = -30; y=b; System.out.println(origen.x); int z = origen.x * origen.y; Métodos origen.y = origen.x; Clase Punto Fragmento aplicación Public Pueden ser accesadas desde cualquier parte. Acceso directo (más simple) Las variables pueden recibir cualquier valor del tipo correspondiente, incluso valores no aceptables. El objeto puede resultar inconsistente. Private Sólo las accesan constructores y métodos del objeto. Acceso restringido Las variables sólo reciben valores que los constructores y métodos permitan. Si los métodos están correctos y hacen las validaciones adecuadas, el objeto no cae en inconsistencias Constructores Constructores Constructores Contienen las instrucciones que se ejecutan al momento de crear una instancia de clase. Tienen el mismo nombre que la clase. Normalmente se utilizan para inicializar las variables de instancia. Pueden recibir valores por parámetro. Todas las clases deben tener un constructor, el que se utilizará en la instanciación de objetos de la clase. Si se omite la implementación del constructor de una clase, Java proporciona automáticamente un constructor sin parámetros y sin instrucciones. public class CajaAhorro Ejemplo constructor sin parámetros: private int saldo; private int transacciones; public CajaAhorro() saldo = 0; transacciones = 0; Ejemplo constructor con parámetros: public class Reloj private int horas, minutos, segundos; public Reloj(int hh, int mm, int ss) horas = hh; minutos = mm; segundos = ss;

16 Métodos Métodos Métodos Un método es un conjunto de instrucciones que permiten a un objeto realizar una tarea que le es propia. En los primeros lenguajes orientados a objeto se hablaba de los métodos para. Ejemplo: método para abonar método para girar Visibilidad Tipo valor retornado Lista de parámetros public class CajaAhorro private int saldo; private int transacciones; public void depositar( int monto ) saldo = saldo + monto; transacciones++; Nombre del método El modificador de visibilidad determina quién puede invocar el método: Mayor visibilidad: Menor visibilidad: Todo el mundo Cualquier clase Sólo constructores y (cualquier otra clase) Cualquier del mismo métodos de la misma subclase package clase Public Protected (Por omisión) Private Métodos Métodos Métodos Los métodos pueden o no retornar un valor. El modificador de tipo de valor retornado puede ser: void: el método no retorna valor. Un tipo primitivo: short, byte, int, long, char, boolean, float, double. Una clase: String, CuentaCorriente, Pez, etc. Un arreglo de tipos primitivos o clases: int[ ], String[ ], String[ ][ ][ ], Pez[ ], etc. Cada método puede retornar como máximo un único tipo de valor. Para retornar valores se utiliza la instrucción return. Formato: return valor; return variable; El flujo de un método termina cuando se alcanza una instrucción return. Todos los flujos de control de un método no void deben terminar en un return que retorne un valor del tipo indicado en la declaración del método. Ejemplo (suponer que dato es variable de instancia): public boolean sumapositivo(int x ) if ( x < 0 ) return false; dato = dato + x; return true; Métodos Métodos Métodos Un método void puede incluir la sentencia return sin valor: return; Esto permite interrumpir la ejecución del método cuando la instrucción return se alcanza. public void sumapositivo(int x ) if ( x < 0 ) return; dato = dato + x; El nombre de cada método es arbitrario. Debe ser representativo de la función que cumple. Por ejemplo abonar es el método para abonar dinero en la CuentaAhorro. Convención: primeraletraenminúscula Ejemplo: consultarsaldo, inscribircurso, determinarsiguientetrabajo. Son variables que reciben valores que el constructor o método requiere para cumplir su función, y que no correspondan a variables de instancia. No todos los constructores, ni todos los métodos, requieren parámetros. Cada parámetro es de un tipo primitivo, clase o arreglo

17 Métodos Parámetros formales y actuales Parámetros formales y actuales Formato para declarar parámetros: ( tipo1 var1, tipo2 var2,, tipon varn) Por ejemplo: public String determinarnombre( String rol) public boolean crearficha( int cód, String nom) public void asignarcoordenada( float x, float y ) public void asignarcoordenada( float x, y ) : Error! 145 Formales: son las variables que se especifican en la lista de parámetros de cada constructor o método. Actuales: son las variables o valores que se indican en el punto de llamado de un constructor o método. Parámetros formales y actuales deben coincidir en cantidad, tipo y significado. 146 public class Reloj int hora, ninuto; Parámetros formales boolean activado; public void sethora (int h, int s, boolean a) hora = h; minuto = s; activado = a; public class Aplicación Reloj citizen = new Reloj(); int y = 8; citizen.sethora( y, 20, true); Parámetros actuales 147 Parámetros formales y actuales Palabra reservada this Variables en constructores y métodos Los parámetros permiten a los métodos recibir valores traspasados desde el punto de llamado (traspaso de parámetros por valor). Si un constructor o método tiene parámetros denominados igual que variables de instancia, los primeros ocultan a estas últimas al interior del referido constructor o método. public class Punto private int x; private int y; public void setcoordenadas(int x, int y) x = x; y = y; Los valores de los parámetros se asignan a ellos mismos 148 La palabra reservada this permite hacer una autorreferencia al objeto, y acceder a variables de instancia ocultas por coincidencia de nombre con parámetros en constructores o métodos. public class Punto private int x; private int y; public void setcoordenadas(int x, int y) this.x = x; Los valores de los parámetros se asignan this.y = y; a las variables de instancia 149 Las variables que constructores y métodos pueden utilizar pueden ser: Variables de instancia del objeto, sean public, private o protected. Parámetros del constructor/método. Variables locales: variables declaradas dentro del cuerpo del constructor o método. Se crean y utilizan en cada ejecución del constructor o método. No existen fuera de él (sus valores se pierden al terminar el constructor o método que las creó). 150 Variables en constructores y métodos Variables locales public class Tiempo private int minutos; Parámetros public int sumatiempo(int hora, int min) int aux; Variable local aux= hora * 60 + min; minutos = minutos + aux; Variable de instancia 151 Las variables locales son variables de función auxiliar dentro de constructores y métodos. Criterio elemental de diseño: las variables auxiliares siempre deben declararse como variables locales, nunca como variables de instancia aunque igual funcione. 152 Uso de objetos ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso 17

18 Uso de objetos Referencias Referencias Los objetos deben instanciarse. En la instanciación se invoca al constructor de la clase. Debe invocarse al constructor con los parámetros adecuados. Ejemplo: CuentaAhorro micuenta = new CuentaAhorro(); Tiempo horainicio = new Tiempo( 12, 22 ); Los objetos son manejados por referencia: CuentaAhorro micuenta = new CuentaAhorro(); Atributos Objeto tipo referencia constructores CuentaAHorro Métodos etc (tiene dirección de memoria, ej: 10A0:F2001) Variable micuenta tipo CuentaAhorro (referencia una dirección de memoria, ej: 10A0:F2001) Rutear: CuentaAhorro cuenta1, cuenta2, cuenta3; cuenta1 = new CuentaAhorro(); cuenta2 = new CuentaAhorro(); cuenta1.abonar(1000); cuenta2.abonar(500); cuenta3 = cuenta2; cuenta3.girar(50); Referencias Referencias Referencias Comparaciones: La comparación de referencias permite determinar si dos variables referencian a un mismo objeto (comparación de direcciones). No permite determinar si dos objetos son iguales. Una variable definida para referenciar objetos de una determinada clase, en cualquier momento puede: Contener la dirección de memoria (referencia) de un objeto de la clase. Contener la dirección null (dirección nula). Pérdida de referencias y recolector de basura: Cuando un objeto deja de ser referenciado, se vuelve inaccesible. El recolector automático de basura de Java (automatic garbage collector) lo destruye, liberando la memoria utilizada. Los objetos que no son referenciados no pueden ser accesados nuevamente. La información almacenada se pierde con ellos. El recolector de basura toma los objetos que no se encuentren referenciados y los destruye, liberando espacios de memoria. Formas más comunes (voluntarias o involuntarias) de perder un objeto que cuenta con una única referencia: Asignar a la variable de referencia otro objeto también existente (ejemplo anterior). Instanciar un nuevo objeto y asignarlo a la variable de referencia. Asignar la dirección null a la variable de referencia Arreglos de referencias a objetos Arreglos de referencias a objetos Arreglos de referencias a objetos Se declaran e instancian como los arreglos de tipos primitivos: Clase[] variable = new Clase[entero]; Ejemplo: CuentaAhorro[] ctas = new CuentaAhorro[200]; Tiempo[] reloj = new Tiempo[n] // con n entero Un arreglo de objetos puede almacenar en cada posición una referencia a un objeto de la clase con que fue definido, o también la dirección null. La instanciación de un arreglo no instancia los objetos que puede referenciar. Los objetos a referenciar desde un arreglo deben instanciarse individualmente. Pos[] Pos[] Pos[] Pos[]

19 Arreglos de referencias a objetos Arreglos de objetos Arreglos de objetos Se debe instanciar cada objeto y luego asociarlo al arreglo: variable = new Constructor( parámetros ); nombrearreglo[entero] = variable; También se puede instanciar y asociar inmediatamente: nombrearreglo[entero] = new Constructor( parámetros ); NOTA: también es posible asociar dos o más posiciones a un mismo objeto. public class Valor public int x; private int y; public Valor(int x, int y) this.x=x; this.y=y; public void sety( int a ) y = a; public int gety() return y; public class ArregloObjetos public static void main(string[] args) Valor[] lista; lista = new Valor[100]; int i = 0; while(i <100) lista[i]=new Valor(i,2*i); i++; Código en Github public class ArregloObjetos public static void main(string[] args) Valor[] lista; lista = new Valor[100]; int i = 0; while(i <100) lista[i]=new Valor(i,2*i); i++; i=0; int sx = 0, sy=0; while(i <100) sx = sx + lista[i].x; sy = sy + lista[i].gety(); i++; Sobrecarga de constructores Sobrecarga de constructores Una clase puede tener más de un constructor. Los constructores se diferencian por cantidad, tipo y orden de parámetros. public class Valor private int x; private int y; Sobrecarga ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Ejemplo: constructores distintos de la clase Observación: public Observación() public Observación(int a) public Observación(int a, double b) public Observación(double a, int b) Esto permite instanciar objetos considerando distintos tipos de datos disponibles. 167 public Valor() Constructor sin parámetros x = 0; y = 0; public Valor(int a, int b) Constructor con dos parámetros tipo x = a; y = b; entero 168 Sobrecarga de constructores Sobrecarga de métodos Sobrecarga de métodos public class Valor private int x; private int y; public Valor() x = 0; y = 0; public Valor(int a, int b) x = a; y = b; Clase Valor public class Ejemplo public static void main Valor ob1, ob2; ob1 = new Valor( 3, 5 ); ob2 = new Valor(); //Las siguientes fallan: Valor ob3, ob4; ob3 = new Valor( 2 ); ob4 = new Valor( 2.0, 3.0); No existe el constructor de un parámetro int Aplicación No existe el constructor de dos parámetros double Una clase puede tener más de un método con el mismo nombre. Los métodos se diferencian por nombre del método, y cantidad, tipo y orden de sus parámetros. Todo esto constituye la firma del método (method signature). Ejemplo: métodos distintos de una clase: public double sumatiempo() public double sumatiempo(int a) public double sumatiempo(double a) public double sumatiempo(int a, double b) public double sumatiempo(double a, int b) Importante: el tipo de valor retornado no forma parte de la firma del método (no es utilizado para distinguir entre métodos). public double sumatiempo(int a) public double sumatiempo(int b) public double sumatiempo(int a) No existe el constructor Error Conceptual: Java no distingue entre ellos: genera un error de compilación

20 Sobrecarga de métodos Sobrecarga de métodos Sobrecarga de métodos y promoción de argumentos public class Persona private String nombre; private int edad; public void setedad(int x) edad = x; public void setedad(double x) edad = (int) x; Método setedad( int ) Método setedad( double ) 172 public class Persona private String nombre; private int edad; public void setedad(int x) edad = x; public void setedad(double x) edad = (int) x; Clase Valor public class Ejemplo public static void main Persona p1; p1 = new Persona(); P1.setEdad( 35 ); p1.setedad( 35.0 ); Aplicación 173 public class Valor private int dato; public void setedad(short x) dato = x; public void setedad(int x) dato = x; public void setedad(double x) edad = (int) x; Clase Valor public class Ejemplo public static void main Valor v = new Valor(); v.setedad( 35 ); v.setedad( 35.0 ); // Aquí hay promoción: byte b = 3; v.setedad( b ); v.setedad( 35f ); Aplicación 174 Estructura general de una clase Java Collections Framework public class IdentificadorClase Declaración variables de instancia Provee a los desarrolladores un conjunto de clases e interfaces que facilitan la tarea de manejar colecciones de objetos. Declaración constructor 1 cuerpo constructor 1 Declaración constructor 2 cuerpo constructor 2 Declaración constructor n cuerpo constructor n Declaración método 1 cuerpo método 1 Declaración método 2 cuerpo método 2 Declaración método n cuerpo método n 175 Colecciones en Java ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Las colecciones trabajan con un conjunto de elementos de manera similar a estructuras más básicas como arreglos o listas enlazadas. La diferencia es que sus operaciones son de alto nivel y encapsulan los detalles de implementación. La mayoría de las colecciones de Java se encuentran en el paquete java.útil. 177 Java Collections Framework Java Collections Framework ArrayList public class ArrayList<E> Es la implementación de una lista (permite elementos repetidos) mediante arreglos. Collection: la raíz de la jerarquía de colecciones. Una colección representa a un grupo de objetos conocidos como sus elementos. Set: una colección que no puede contener elementos duplicados. Es la abstracción matemática de un conjunto. Lista: una colección ordenada (secuencia), contienen elementos duplicados. 178 Lista: El usuario de una lista generalmente tiene un control preciso sobre donde en la lista cada elemento se inserta y puede acceder a los elementos por su índice (posición). Mapa: un objeto que mapea claves a valores. Un mapa no puede contener claves duplicadas; a cada clave se le puede asignar a los más un valor. 179 Es des-sincronizado (los cambios realizados por múltiples hilos no son reflejados)

21 ArrayList ArrayList ArrayList Operaciones - agregar: Primero se creará el ArrayList: ArrayList<String> nombres = new ArrayList<String>(); Luego agregaremos algunos elementos: nombres.add("victor"); nombres.add("luis"); nombres.add("elena"); Operaciones - recorrido: Importante: para obtener el tamaño se usa size() int size=nombres.size(); Ahora, recorremos mostrando los elementos: for(int i=0; i<nombres.size() ; i++) System.out.println(nombres.get(i)); Operaciones - iterar: Importante: Para obtener el iterador sobre el ArrayList llamaremos al método iterator() del ArrayList y lo almacenaremos en un elemento Iterator: Iterator<String> it = nombres.iterator(); Para iterar un ArrayList vamos a movernos por el iterador mediante los métodos.next(). El método.next() realiza dos operaciones, por un lado obtener el elemento sobre el que está iterando y luego mover el puntero hasta el siguiente elemento: while(it.hasnext()) System.out.println(it.next()); Ejemplo ArrayList package ejemploarraylist; import java.util.*; public class EjemploArrayList public static void main(string[] args) /*Declaración de un ArrayList*/ ArrayList<String> arraylistejemplo = new ArrayList<String>(); /*Se agregarán 10 registros*/ for(int i=1; i<=10; i++) String registroaux="registro "+i; arraylistejemplo.add(registroaux); /*También se puede agregar en una posición especifica, ejemplo en la pos 5*/ arraylistejemplo.add(5, "Ejemplo Registro"); /*Mostraremos los elementos*/ Iterator<String> iterador = arraylistejemplo.iterator(); Vector public class Vector<E> Es la implementación de una lista (permite elementos repetidos) mediante arreglos. Es sincronizado (los cambios realizados por múltiples hilos son reflejados). Vector Vector es prácticamente igual a ArrayList, su única diferencia es que ArrayList es des-sincronizado (los cambios realizados por múltiples hilos son reflejados). while(iterador.hasnext()) String dato= iterador.next(); System.out.println(dato); Código en Github Stack HashSet HashTable Se extiende de la clase Vector agregando las funciones para ser operada como Stack Permite guardar objetos almacenándolos en forma de pila tipo LIFO. public class HashSet<E> Implementa la interfaz Set mediante una hash table (una instancia de HashMap). Permite el elemento null. No entrega garantía en cuanto al orden de iteración al interior del set: o No garantiza que el orden permanecerá constante en el tiempo. public class HashTable<K,V> Implementa una hash table, la cual almacena pares clave-valor (key-value pairs). Cualquier objeto no null puede ser utilizado como clave o valor. Los objetos utilizados como claves deben implementar el método hashcode y el método equals

22 HashTable Maps Maps Reemplaza a los diccionarios ya que cumplen la misma función y de manera más eficiente. Las hashtable son comúnmente usadas para almacenar datos de usuarios y contraseñas debido a su rápido acceso y codificación (hashconde) Permite representar una estructura de datos para almacenar pares clave/valor ; de tal manera que para una clave solamente tenemos un valor. Esta estructura de datos también es conocida en otros lenguajes de programación como Diccionarios. Los Maps en java tienen implimentada por debajo toda la teoría de las estructuras de datos de los Arboles (AVL, B, B+, B*) por tanto permiten añadir, eliminar y modificar elementos de forma trasparente. Tipos de Maps: HashMap: Los elementos que inserta en el map no tendrán un orden específico. No aceptan claves duplicadas ni valores nulos. TreeMap: El Mapa lo ordena de forma natural. Por ejemplo, si la clave son valores enteros (como luego veremos), los ordena de menos a mayor. LinkedHashMap: Inserta en el Map los elementos en el orden en el que se van insertando; es decir, que no tiene una ordenación de los elementos como tal, por lo que esta clase realiza las búsquedas de los elementos de forma más lenta que las demás clases Maps Maps Maps HashMap: HashMap: TreeMap: Maps Maps Maps TreeMap: LinkedHashMap: LinkedHashMap:

23 Herencia Súperclases y subclases Es la derivación de una clase a partir de otra existente. El objetivo es la reutilización del software desarrollado. La clase de la cual se deriva otra clase se denomina clase base, súperclase o clase padre. Súperclase Clase base Clase padre Una clase derivada de una súperclase recibe también el nombre de subclase Conceptos básicos de herencia ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso 200 o clase hija. La herencia aplica en relaciones de naturaleza B es un tipo de A. Subclase Clase derivada Clase hija 201 Súperclases y subclases Herencia simple Herencia múltiple La subclases heredan propiedades de su súperclase. Una subclase, respecto de su súperclase: Agrega nuevas propiedades Una clase es subclase de una única súperclase. Una clase es subclase de más de una súperclase. Java no soporta la herencia múltiple. Modifica propiedades heredadas Jerarquías de herencia Ejemplos Ejemplos La herencia organiza clases bases y derivadas en jerarquías de clases. Se heredan los métodos y atributos públicos. La organización gráfica (UML) es como se muestra a continuación: Determinar si en las siguientes situaciones existe una relación de herencia entre las clases (indicadas en negrita): Caso Todo Electrodoméstico se enciende y apaga. El Horno microondas tiene además abre y cierra su puerta. Los Bienes raíces tienen un Rol de identificación. Una Casa tiene también un Jefe de hogar y un Negocio tiene una Patente comercial Un Camión tiene Patente. Un Conductor tiene un camión conducido. Existe herencia? Si Si No Determinar si en las siguientes situaciones existe una relación de herencia entre las clases (indicadas en negrita): Caso Los Archivos Multimediales pueden ser Imágenes o Música. Las imágenes pueden ser a Color o Blanco y Negro. Un Avión tiene Fuselaje, Alas y Motores. Una Gaviota vuela. Una Abeja vuela y además tiene aguijón. Existe herencia? Si No No

24 Implementación de jerarquías de herencia Implementación de jerarquías de herencia Implementación de jerarquías de herencia Para crear una clase hija a partir de una clase padre, en Java la clase hija debe declararse: public class NombreSubclase extends NombreSuperclase Ejemplo: public class Alumno extends Persona Implementar las clases Persona y Alumno, de acuerdo con lo siguiente: public class Persona public String rut; public String nombre; public Persona() rut = " "; nombre = ""; public void setrut(string r) rut = r; public String getrut() return rut; public void setnombre(string n) nombre = n; public String getnombre() return nombre; public class Alumno extends Persona public String rolucv; public Alumno() rolucv = "; public void setrolucv(string r) rolucv = r; public String getrolucv() return rolucv; public String quiénsoy() return rut + nombre + rolucv; Clase Persona Clase Alumno Miembros heredados Miembros heredados Ejercicio Una subclase hereda de su súperclase (por el momento): Variables de instancia públicas Métodos públicos Todos los anteriores pueden ser utilizados en la subclase como si hubieran sido declarados en ella. El atributo apellido al ser privado no se hereda Maneras correctas: Implemente las clases Vehículo, Autobús y Camión, dados los siguientes antecedentes: Todo Vehículo tiene patente y marca. Los Autobuses y los Camiones son Vehículos. Todo Autobús tiene cantidad de asientos. Todo Camión tiene carga en toneladas. Esto está erroneo Consideraciones sobre herencia ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Miembros heredados Recordar que: Una subclase hereda de su clase padre (por el momento): o Variables de instancia públicas o Métodos públicos Todos los anteriores pueden ser utilizados en la clase hija como si hubieran sido declarados en ella. 215 Miembros no heredados Una subclase no hereda: Propiedades privadas Constructores Los miembros no heredados no pueden aparecer en el código de la clase hija

25 Miembros no heredados Miembros no heredados Miembros no heredados public class Persona private String rut; private String nombre; public Persona() rut = " "; nombre = ""; public void setrut(string r) rut = r; public String getrut() return rut; public void setnombre(string n) nombre = n; public String getnombre() return nombre; Clase Persona public class Alumno extends Persona public String rolucv; public Alumno() rolucv = "; public void setrolucv(string r) rolucv = r; public String getrolucv() return rolucv; public String quiénsoy() return rut + nombre + rolucv; Clase Alumno Error (E.C): no pueden ser accesadas directamente 217 Las variables privadas no son heredadas, por lo que no pueden aparecer en el código de la clase hija. Sin embargo se puede hacer uso indirecto de ellas en la clase hija, a través de los métodos públicos de manipulación implementados en la respectiva súperclase. En una clase hija es también posible referenciar al constructor de la clase padre. 218 public class Persona private String rut; private String nombre; public Persona() rut = " "; nombre = ""; public void setrut(string r) rut = r; public String getrut() return rut; public void setnombre(string n) nombre = n; public String getnombre() return nombre; Clase Persona public class Alumno extends Persona private String rolucv; public Alumno() rolucv = "; public void setrolucv(string r) rolucv = r; public String getrolucv() return rolucv; public String quiénsoy() return getrut() + getnombre() + rolucv; Forma correcta Clase Alumno 219 Miembros no heredados: Constructores Miembros no heredados: Constructores Miembros no heredados: Constructores Los constructores no son heredados, por lo que cada clase hija debe tener su(s) propio(s) constructor(es). Sin embargo en los constructores se puede invocar al constructor de la clase padre con la instrucción: super( lista parámetros ) Importante: La instrucción super debe ser la primera instrucción del constructor. public class Persona private String rut; private String nombre; public Persona(String r, String n) rut = r; nombre = n; public void setrut(string r) rut = r; public String getrut() return rut; public void setnombre(string n) nombre = n; public String getnombre() return nombre; public class Alumno extends Persona private String rolucv; public Alumno() super( , N/A ); rolucv = "; public void setrolucv(string r) rolucv = r; public String getrolucv() return rolucv; public String quiénsoy() return getrut() + getnombre() + rolucv; public class Persona private String rut; private String nombre; public Persona(String r, String n) rut = r; nombre = n; public void setrut(string r) rut = r; public String getrut() return rut; public void setnombre(string n) nombre = n; public String getnombre() return nombre; public class Alumno extends Persona private String rolucv; public Alumno(int r,string n,int l) super( r, n ); rolucv = l; public void setrolucv(string r) rolucv = r; public String getrolucv() return rolucv; public String quiénsoy() return getrut() + getnombre() + rolucv; 220 Clase Persona Clase Alumno 221 Clase Persona Clase Alumno 222 Herencia y constructores Herencia y constructores Herencia y constructores Toda clase hija debe incluir una referencia super a algún constructor de la superclase. Si no se incluye la referencia super, Java incluye automáticamente una referencia al constructor sin parámetros de la superclase. Es decir incluye: super() Notar que se produce un error cuando no existe un constructor sin parámetros en la superclase y se omite la referencia super en la subclase por qué? 223 Dos clases equivalentes: public class Alumno extends Persona private String rolucv; public Alumno() super(); rolucv = "; Clase Alumno public class Alumno extends Persona private String rolucv; public Alumno() rolucv = "; Clase Alumno 224 public class Persona private String rut; private String nombre; public Persona(String r, String n) rut = r; nombre = n; public void setrut(string r) rut = r; public String getrut() return rut; public void setnombre(string n) nombre = n; public String getnombre() return nombre; Clase Persona public class Alumno extends Persona private String rolucv; public Alumno() super( , N/A ); rolucv = "; public void setrolucv(string r) rolucv = r; public String getrolucv() return rolucv; public String quiénsoy() return getrut() + getnombre() + rolucv; Clase Alumno

26 Herencia y constructores: Cuidado! Herencia y constructores: Cuidado! Herencia y constructores public class Persona private String rut; private String nombre; public Persona(String r, String n) rut = r; nombre = n; public void setrut(string r) rut = r; public String getrut() return rut; public void setnombre(string n) nombre = n; public String getnombre() return nombre; public class Alumno extends Persona private String rolucv; public Alumno() rolucv = "; public void setrolucv(string r) rolucv = r; public String getrolucv() return rolucv; public String quiénsoy() return getrut() + getnombre() + rolucv; public class Persona public class Alumno extends Persona private String rut; private String rolucv; private String nombre; public Alumno() public Persona(String r, String n) rolucv = "; rut = r; nombre = n; public void setrolucv(string r) public void setrut(string r) No compila rolucv = r; rut = r; public String getrolucv() public String Java incluye getrut() automáticamente public Alumno() return rolucv; return una rut; referencia super(), pero a un super(); public void constructor setnombre(string inexistente en n) la rolucv = public "; String quiénsoy() nombre = n; return getrut() + getnombre() súperclase. public String getnombre() + rolucv; return nombre; En Java toda clase extiende otra clase. Las clases que no declaran extender a otras, extienden a la clase Object. Object es la superclase (directa o indirecta) de todas las clases. Todas las clases son subclases de Object o de otra subclase. Por lo tanto: todos los constructores incluyen (explícitamente o no) una referencia al constructor de su superclase. Clase Persona Clase Alumno 226 Clase Persona Clase Alumno Herencia y constructores Ejercicio Un videojuego tiene Personajes. Cada personaje tiene un nombre (String) y un nivel propio de energía (int). Además implementan el método alimentarse, que recibe por parámetro una cantidad de energía (int) con el que incrementa el nivel propio de energía. Los personajes pueden ser: Guerreros: tienen además un arma (String). Al momento de la instanciación reciben su nombre, arma y nivel propio de energía inicial. Los guerreros tienen un método combatir que recibe por parámetro la cantidad de energía a gastar en el ataque, la cual es descontada de su nivel propio de energía. El método combatir retorna el arma y la cantidad de energía del ataque concatenados. Ejercicio Magos: tienen además un poder (String). Al momento de la instanciación reciben su nombre y poder. Los magos son siempre creados con un nivel propio de energía igual a 100. Proveen un método encantar, que disminuye en 2 unidades el nivel propio de energía y que retorna el poder del mago Sobre escritura de métodos Sobre escritura de métodos Un método declarado e implementado en una súperclase puede ser Aplicaciones y herencia reimplementado en una subclase. Esto se denomina sobreescritura de métodos. Conceptualmente significa que la subclase realiza la operación de la súper clase, pero de un modo distinto. Esto es un caso de polimorfismo. public class Persona private String rut; private String nombre; public String getrut() return rut; public String getnombre() return nombre; public String identificarse() return rut + nombre; //otros miembros de la clase public class Alumno extends Persona private String carrera; public String identificarse() return getrut() + getnombre() + carrera; //otros miembros de la clase ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso

27 Sobre escritura de métodos Sobre escritura de métodos Sobre escritura de métodos public class Persona private String rut, nombre; public Persona(String r, String n) rut = r; nombre = n; public String getrut() return rut; public String getnombre() return nombre; public String identificarse() return rut + nombre; public class Alumno extends Persona private String carrera; public Alumno(String r, String n, String c) super(r,n); carrera = c; public String identificarse() return getrut() + getnombre() + carrera; public class Persona private String rut, nombre; public Persona(String r, String n) rut = r; nombre = n; public String getrut() return rut; public String getnombre() return nombre; public String identificarse() return rut + nombre; public class Alumno extends Persona private String carrera; public Alumno(String r, String n, String c) super(r,n); carrera = c; public String identificarse() return getrut() + getnombre() + carrera; El compilador Java es responsable de verificar que el método pertenezca al tipo de dato declarado por la variable. El intérprete Java es responsable de identificar y ejecutar la implementación del método correspondiente al tipo de objeto referenciado en el momento por la variable. Persona a = new Persona( 100, Matías ); System.out.println( a.identificarse() ); Alumno a = new Alumno( 100, Matías, Ind ); System.out.println( a.identificarse() ); 100Matías 100MatíasInd Persona a = new Alumno( 100, Matías, Ind ); System.out.println( a.identificarse() ); 100MatíasInd Java resuelve en tiempo de ejecución la asociación entre la variable y el método que debe invocar, en función del objeto que se encuentre referenciado en ella. Persona a = new Alumno( 100, Matías, Ind ); System.out.println( a.identificarse() ); Reconocimiento de clases: Instanceof Reconocimiento de clases: Instanceof Reconocimiento de clases: Instanceof El operador instanceof permite reconocer la clase a la que pertenece un objeto referenciado desde una variable determinada. Formato: Todo objeto es instancia de la clase a la que pertenece, como también instancia de su superclase. Suponer: Persona p1 =null: Profesor p2 = new Profesor(); Alumno p3 = new Alumno(); Persona p4 = new Alumno(); NombreVar instanceof NombreClase Ejemplo: if( pers instanceof Persona ) System.out.println( La variable pers referencia a una Persona ); else System.out.println( La variable pers no referencia a una Persona ); Un objeto de la clase lavadora es también un electrodoméstico if( p1 instanceof Persona ) --> false if( p2 instanceof Profesor ) --> true if( p3 instanceof Alumno ) --> true if( p2 instanceof Alumno ) --> false if( p3 instanceof Persona ) --> true if( p2 instanceof Persona ) --> true if( p4 instanceof Persona ) -->?? if( p4 instanceof Alumno ) -->?? if( p4 instanceof Profesor ) -->?? Acceso a miembros de una clase Acceso a miembros de una clase Acceso a miembros de una clase public class Persona public class Alumno extends Persona private String rut; private String nombre; private String carrera; public setdatos(string r, String n) rut = r; public String matricularse( String c) nombre = n; carrera = c; public String getrut() return rut; public String getnombre() return nombre; Persona a = new Persona(); a.setdatos( , Luis ); Alumno b = new Alumno(); Correcto! b.setdatos( , Pamela ); b.matricularse( Industrial ); public class Persona private String rut; private String nombre; public setdatos(string r, String n) rut = r; nombre = n; public String getrut() return rut; public String getnombre() return nombre; Persona c = new Alumno(); c.setdatos( , Luis ); c.matricularse( Comercial ); public class Alumno extends Persona private String carrera; public String matricularse( String c) carrera = c; Error: el compilador determina que este método no pertenece a Persona. Sin embargo la variable contiene referencia a un Alumno, que es un tipo de Persona (y que posee este método). Es necesario introducir un casting para indicar al compilador que el objeto referenciado en la variable es efectivamente una instancia de Alumno: Persona c = new Alumno(); c.setdatos( , Luis ); ( (Alumno)c ).matricularse( Industrial );

28 Acceso a miembros de una clase Miembros protegidos de una clase Miembros protegidos de una clase El casting no convierte objetos, simplemente explicita el tipo de objeto referenciado en una variable. Persona a = new Profesor(); Profesor b = (Profesor) a; // OK Alumno c = (Alumno) a; // ERROR Persona d = new Persona(); Profesor e = (Profesor) d; // ERROR Alumno f = (Alumno) d; // ERROR Alumno g = new Alumno(); Profesor h = (Profesor) g; // ERROR El modificador de visibilidad protected, permite declarar visibilidad protegida en variables de instancia y métodos. Los miembros de una clase con visibilidad protegida son sólo accesibles desde la misma clase o desde cualquier subclase de ella (no son accesibles desde otras clases). Por lo tanto, una subclase hereda de su superclase: Variables de instancia protegidas y públicas Métodos protegidos y públicos public class Persona protected String rut; protected String nombre; public Persona(String r, String n) rut = r; nombre = n; public void setrut(string r) rut = r; public String getrut() return rut; public void setnombre(string n) nombre = n; public String getnombre() return nombre; public class Alumno extends Persona private String rolucv; public Alumno() super( , N/A ); rolucv = "; public String quiénsoy() return rut + nombre + rolucv; Identificación de superclases Identificación de superclases Clases abstractas ICI3241 Programación Avanzada INF2241 Programación Orientada a Objetos Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Contexto: se está desarrollando una aplicación que trabaja con CD s, DVD s y discos de vinilo. Problema: se establece que a pesar de tener sus propios atributos, todos ellos disponen de código, sello discográfico y autor. Se desea evitar duplicidad de código. Decisión: se determina la conveniencia de crear la clase ProductoMusical, que agrupa las propiedades comunes de los tres tipos de productos Clases abstractas Clases abstractas Clases abstractas: ejemplo En el ejemplo anterior la clase ProductoMusical es abstracta (no representa entidades presentes en el dominio). Esta condición se explicita en el diseño, declarando la clase como abstracta. Una clase abstracta no puede ser instanciada, ha sido diseñada sólo para ser extendida. public abstract class ProductoMusical private int código; private String sello; Un software trabaja con distintas figuras geométricas, todas ellas polígonos, con algunas propiedades en común (ej. cantidad de lados). Polígono

29 Clases abstractas: ejemplo Métodos abstractos Métodos abstractos Polígono public abstract class Poligono protected int lados; public void setlados(int l) lados = l; public class Cuadrado extends Poligono private int longitud; public void setlongitud(double l) longitud = l; Supongamos que en el ejemplo anterior todos los polígonos deben proveer un método de cálculo de área. Conflicto de fuerzas en diseño: Todos los polígonos deben proveer el método, por lo tanto debiese aparecer a nivel de la superclase Polígono. La operación del método depende de cada polígono concreto (ej. área de cuagrado: lado2, área de triángulo base * altura /2, etc.), por lo tanto no puede establecerse una lógica común a nivel de superclase. Solución: declarar método como abstracto en la superclase. Un método abstracto es un método que se declara en una superclase, pero sin proveer implementación. La implementación de un método abstracto se difiere para sus subclases. Una clase que declara uno o más métodos abstractos es necesariamente abstracta (y debe ser declarada como tal). Si una subclase no provee implementación para un método abstracto que hereda de su superclase, es necesariamente abstracta (y debe ser declarada como tal) Métodos abstractos Métodos abstractos Ejercicios Polígono public abstract class Poligono protected int lados; public int setlados(int l) lados = l; public abstract double getarea(); Si una superclase declara algún método abstracto, entonces: Las subclases concretas deben implementarlo. Las variables de referencia declaradas del tipo de la superclase pueden recibir invocaciones al método abstracto, sin necesidad de casting. Ejemplo: Una compañía de teléfonos organiza sus clientes de prepago (rut, nombre, tarifa) y postpago (rut, nombre, dirección, precioplan, minutosdisponibles) en un arreglo de tamaño 5000: Genere la declaración de las clases public class Cuadrado extends Poligono private double longitud; public void setlongitud(double l) longitud = l; public double getarea() return longitud*longitud; 256 Polígono figura = new Triángulo(); double sup = figura.getarea(); getarea() fue declarado como método abstracto en Polígono. 257 Considere un arreglo tipo clase Cliente (aplicando herencia) en el cual se guardarán los distintos clientes. Use plibre. Entregue la cantidad de clientes de prepago existentes Entregue el precio del plan más caro y el más barato. 258 Ejercicios Clases abstractas e interfaces Ambos clientes deben poder facturar, lo cual para se solicita rehacer el ejercicio aplicando clase abstracta: Prepago: corresponde a recibir la cantidad de minutos hablados, multiplicarlos por la tarifa y descontarlos del saldo. PostPago: corresponde a recibir la cantidad de minutos hablados y descontarlos del total de minutos disponibles. Cuál es el rut del cliente postpago que más sobrepasó la cantidad de minutos disponibles? 259 Clases abstractas e interfaces ICI4241 Ingeniería de Software Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso A nivel conceptual, las clases abstractas e interfaces permiten definir qué puede hacer un conjunto o familia de clases relacionadas. Ejemplo en el contexto de la universidad: Las personas (esto es, alumnos, profesores y administrativos ) conocen y retornan su RUT, nombre, teléfono y dirección

30 Clases abstractas Interfaces Interfaces Recorar que: Una clase es declarada abstracta cuando no es posible crear instancias de ella. Una clase debe ser declarada abstracta si posee al menos un método declarado abstracto. Un método abstracto es aquél que no provee implementación. Una subclase de una clase abstracta puede ser instanciada (es decir, puede ser no abstracta ) sólo si provee implementación para todos los métodos abstractos de la superclase. En caso contrario, debe también ser declarada abstracta. En ocasiones, en vez de implementar herencia, es posible implementar interfaces. Una interfaz define un tipo de dato. Esta definición especifica el identificador de un tipo y declara los métodos que el tipo provee (sin implementación). Las interfaces son frecuentemente descritas como contratos: una interfaz garantiza que una clase proveerá cierta funcionalidad, pero sin especificar cómo esta funcionalidad será implementada. La implementación de interfaces se conoce también como herencia por contrato o herencia de interfaces. En estos casos sólo se hereda la interfaz, no hay herencia de funcionalidad. Son útiles cuando una clase debe usar objetos de distintas clases, pero que operan de la misma forma (ej. un temporizador para videograbador, radio, etc.) Interfaces Interfaces: analogía Interfaces: ejemplo Contenido de una interfaz: Nombre y visibilidad Eventuales otras interfaces extendidas Destornillador Clase que debe usar ciertos objetos public interface Despertable public static final int DORMIDO = 1; public static final int DESPIERTO = 2; public void despierta(); La interfaz Despertable Declaraciones de métodos Constantes (declaradas como static final) Una interfaz no provee: Variables de instancia o de clase Implementación para los métodos Modelos de cabezas De tornillos Tornillos Interfaces Clases que implementan alguna de las interfaces public class Persona implements Despertable int estado = DESPIERTO; public void dormir() estado = Despertable.DORMIDO; public void despierta() estado = DESPIERTO; Una clase que implementa la interfaz Despertable Interfaces: ejemplo Uso de interfaces Interfaces y clases abstractas: aspectos comunes public class Alarma public static void despertar(despertable d) d.despierta(); La Alarma es capaz de despertar cualquier objeto que implemente la interfaz Despertable. Una clase puede implementar múltiples interfaces: public class Anfibio implements Terrestre, Acuático Tanto clases abstractas como interfaces necesitan implementación en otras clases, para sus propiedades abstractas: Clases abstractas: requieren subclase(s). public class Ejemplo public static void main(string[] arg) Persona p1 = new Persona(); Alarma.despertar(p1); Despertable p2 = new Persona(); Alarma.despertar(p2); Una interfaz puede extender otras interfaces. public interface Anfibio extends Terrestre, Acuático Algunos enuncian que el uso de interfaces representa una forma de enfrentar el problema de la herencia múltiple en Java. Interfaces: requieren clase(s) que implemente(n) la interfaz

31 Ejemplo Ejemplo Ejemplo El Aerosub ( Viaje al fondo del mar ) Clase que accede a las funciones del Aerosub: Clases que acceden al Aerosub con funcionalidades limitadas: public interface Aéreo public void despegar(); public void acuatizar(); public interface Acuático public void emerger(); public void sumergirse(); public class Aerosub implements Aéreo, Acuático public void despegar() public void acuatizar() public void emerger() public void sumergirse() 271 public class Comandante public Aerosub vehículo; public Comandante(Aerosub v) vehículo = v; public void comandar() vehículo.emerger(); vehículo.despegar(); vehículo.acuatizar(); vehículo.sumergirse(); 272 public class Aviador public Aéreo vehículo; public Aviador(Aéreo v) vehículo = v; public void pilotear() vehículo.despegar(); vehículo.acuatizar(); public class Marino public Acuático vehículo; public Marino(Acuático v) vehículo = v; public void navegar() vehículo.sumergirse(); vehículo.emerger(); 273 Ejercicio 1 Ejercicio 1 Ejercicio 1 Una empresa desarrolladora de software de monitoreo debe crear aplicaciones capaces de obtener datos desde distintos tipos de sensores (de contaminación por partículas, ruido, voltaje, etc.) y mostrar dichos valores por pantalla. Cada aplicación se desarrolla para trabajar con un tipo de sensor. Los sensores son manejados por clases específicas (e.g. TemperatureSensor, DustSensor, etc.) y proveen tres métodos: (1) un método para activarlo; (2) un método que retorne un double correspondiente al valor percibido por el sensor en el momento; y (3) un método para desactivarlo. 274 Los siguientes son ejemplos de aplicaciones desarrolladas por esta empresa: Para manejar un sensor de Temperatura public class Muestra public static void main( String[] arg ) TempSensor t = new TempSensor(); t.activa(); for(int i=0; i<10000; i++ ) System.out.println( t.leetemp() ); t.desactiva(); 275 Los siguientes son ejemplos de aplicaciones desarrolladas por esta empresa: Para manejar un sensor de polvo ambiental public class Muestra public static void main( String[] arg ) DustSensor t = new DustSensor(); t.on(); for(int i=0; i<10000; i++ ) System.out.println( t.readmeasure() ); t.off(); 276 Ejercicio 1 Ejercicio 2 La necesidad de clases abstractas e interfaces A pesar de lo similar de las aplicaciones, en cada ocasión es necesario reescribir no sólo la clase de sensor que se utilizará, sino también las invocaciones correspondientes a sus métodos específicos, lo cual hace el desarrollo ineficiente. Se pide determinar una arquitectura que permita a la empresa simplificar su trabajo de desarrollo. 277 Diseñe y programe las clases e interfaces que permiten resolver el siguiente problema: Se desea construir una clase que permita mantener una colección de objetos ordenados ascendentemente. Los objetos a ordenar pueden ser de cualquier clase. Los objetos deberán implementar un método que permita determinar si un objeto es mayor que otro. 278 Situación 1: Contexto: se está desarrollando una aplicación que trabaja con CD s, DVD s y discos de vinilo. Problema: se establece que a pesar de tener sus propios atributos, todos ellos disponen de código, sello discográfico y autor. Se desea evitar duplicidad de código. Decisión: se determina la conveniencia de crear la clase ProductoMusical, que agrupa las propiedades comunes de los tres tipos de productos. La clase ProductoMusical no es instanciable, por lo tanto se lo declara abstracto

32 La necesidad de clases abstractas e interfaces Discusión Situación 2: Contexto: se está desarrollando una clase Timer para programar distintos objetos temporizables (ej. relojes, grabadoras, alarmas, etc.) Problema: Los objetos temporizables pueden ser distintos, y al momento de desarrollar el Timer no se sabe exactamente de qué clase son. Decisión: se define una interfaz (o una clase abstracta, si hay código en común) que implementarán todos los objetos temporizables. El Timer accede a los objetos temporizables a través de esta interfaz. Tanto clases abstractas como interfaces permiten describir propiedades comunes de familias de clases. Cuándo conviene utilizar unas u otras? Interfaces paso a paso ICI4241 Ingeniería de Software Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Consideraciones Definición inicial del ejemplo Implementación Una Interface es una clase abstracta pura en la que todos sus métodos son abstractos y por tanto no se pueden implementar en la clase Interface. Una Interface no se pueden definir atributos excepto que estos sean estáticos o constantes; es decir: static o final. Simularemos el comportamiento que tendrían los diferentes integrantes de la selección Chilena; se considerará los Futbolistas y el cuerpo técnico. Para este ejemplo considere: Se comenzará con la clase IntegranteSeleccionFutbol que es una Interface en la que tiene definido cuatro métodos. Como se ha dicho en esta clase solo se definen los métodos pero no se implementan: Implementación Implementación Implementación Lo siguiente que se ve en el diagrama de clases es la clase SeleccionFutbol que es una clase abstracta que utiliza (implements) la Interface IntegranteSeleccionFutbol: Al ser esta una clase abstracta no se puede instanciar y por tanto en ella no es necesario implementar los métodos de la Interfece, pero si será obligatorio implementarlo en sus clases hijas. Y en las clases hijas sólo se implementará los métodos de la clase padre que se quiera redefinir: Recordar que la significa que ese método esta siendo redefinido

33 Implementación Implementación Implementación Main Salida Importante El método entrenar (y otros métodos) solo por ejemplo tienen system.out.println() dentro de su implementación, ya que bajo las buenas prácticas de POO esta implementación debería ser del main. Bajar el código fuente desde el aula y comenzar a hacer ejercicios! Excepciones ICI4241 Ingeniería de Software Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso Definición Una excepción es un evento que ocurre durante la ejecución de un programa, y que interrumpe su flujo de control normal. Normalmente se encuentran asociadas a errores. Los errores pueden tener distintos orígenes: falla del disco duro, problemas en la red, problemas de programación (ej. división por cero), etc. 296 Detección de errores Cuando ocurre un error durante la ejecución de un método en Java se genera un objeto excepción que es enviado al ambiente de ejecución. El flujo de control normal del programa es interrumpido: El objeto excepción contiene información relativa al error, incluyendo el tipo del mismo y el estado del programa al momento de haberse producido. Cuando se genera el objeto excepción, el ambiente de ejecución busca en el stack de llamadas a métodos alguno que sea capaz de manejar la excepción (exception handler). Si no lo encuentra, la JVM se hace cargo de él, y el programa termina con un mensaje de error

34 Ejemplo Ejemplo Jerarquía de excepciones Un caso de división por cero: Un caso de división por cero: Object public class Par int x, y; public Par(int x, int y ) this.x = x; this.y = y; public int divide() return x/y; public class Division public static void main(string[] arg) Par par = new Par( 100, 0 ); par.divide(); System.out.println( Fin programa ); Clase Par, recibe dos números enteros y permite obtener el cuociente entre ellos El objeto de la clase Par realizará una división por cero 298 El método main invoca al método divide del objeto de la clase Par. Durante la ejecución del método divide se genera una excepción. Ejecución Clase de excepción: java.lang.arithmeticexception Información: / by zero (división por cero) Stack de llamadas de métodos: 1. Método divide de la clase Par (archivo Par.java, línea 11) llamado por 2. Método main de la clase Division (archivo Division.java, línea 6) 299 Error Throwable Exception RuntimeException 300 Opciones en el control de excepciones Lanzamiento de una excepción Lanzamiento de una excepción Frente a un determinado tipo de excepción un método puede: Lanzar la excepción fuera de él, para traspasar al método invocante la responsabilidad de tratar la excepción; o en caso de ser el primer método del stack de llamadas, traspasar la responsabilidad a la JVM. Capturar la excepción, y proveer un flujo de control alternativo. Para indicar que un método traspasará la responsabilidad del control de excepciones al método llamante, se debe usar la cláusula throws en la declaración del método, seguida por el nombre de la excepción. Ejemplo: Nombre excepción public boolean startplaying() throws SoundException Un ejemplo clásico: lectura de datos de la consola import java.io.* ; public class Factorial public static void main( String arg[ ] ) throws IOException int número=0, i=1, fact=1; BufferedReader lector = new BufferedReader( new InputStreamReader( System.in ) ); String ingresado=null; System.out.println( "Ingrese número para cálculo de factorial: " ); ingresado = lector.readline( ); número = Integer.parseInt( ingresado ); while( i <= número ) fact = fact * i; i++; System.out.println( "El factorial de " + número + " es " + fact ); // Fin método main // Fin clase Captura de una excepción Las excepciones pueden ser capturadas y manejadas usando bloques try, catch y finally (operan en conjunto) El bloque try debe incluir las instrucciones que pueden generar la excepción que se desea manejar. Debe ser seguido por al menos un bloque catch o un bloque finally. El bloque catch debe seguir al bloque try, y debe contener las instrucciones que serán ejecutadas en caso de generarse una excepción. El bloque finally incluye las instrucciones que deberán ejecutarse independientemente de la generación (o ausencia) de una excepción (normalmente usados para liberar recursos). 304 Captura de una excepción Formato general: El tipo de excepción (Tipo_Excepción1, Tipo_Excepción2, etc.) representa la clase de excepción que se puede generar en el bloque try que interesa capturar y controlar. Al producirse una excepción sólo uno de los bloques catch será ejecutado El orden de los catch es importante: las subclases de excepciones deben ser especificadas antes de sus superclases try // instrucciones que pueden fallar catch (Tipo_excepción1 nombre_variable) // instrucciones a ejecutar si se produce // una excepción tipo 1 catch (Tipo_excepción2 nombre_variable) // instrucciones a ejecutar si se produce // una excepción tipo 2 catch (Tipo_excepciónN nombre_variable) // instrucciones a ejecutar si se produce // una excepción tipo N finally // instrucciones a ejecutar siempre 305 Captura de una excepción Ejemplo clásico import java.io.* ; public class Factorial public static void main( String arg[ ] ) int número=0, i=1, fact=1; BufferedReader lector = new BufferedReader( new InputStreamReader( System.in ) ); String ingresado=null; System.out.println( "Ingrese número para cálculo de factorial: " ); try ingresado = lector.readline( ); número = Integer.parseInt( ingresado ); while( i <= número ) fact = fact * i; i++; System.out.println( "El factorial de " + número + " es " + fact ); catch( IOException e ) System.out.println( "Error de input." ); // Fin método main // Fin clase

35 Ejemplo Ejemplo Información relacionada con la excepción En este caso la excepción es interceptada en el método divide public class Par int x, y; public Par(int x, int y ) this.x = x; this.y = y; public int divide() try return x/y; catch(arithmeticexception e) Nota: en el ejemplo es return ; discutible la decisión de retornar esta constante en caso de error en la división public class Division public static void main(string[] arg) Par par = new Par( 100, 0 ); int res = par.divide(); System.out.println( "El cuociente es: " + res ); A pesar del error el programa completa su ejecución normalmente: Qué ocurre? La excepción se produce en el método divide() de la clase Par, dentro del bloque try. Esta excepción es capturada en el bloque catch, y el código escrito en este último es ejecutado. Toda instancia de excepción tiene un método printstacktrace, que imprime el stack de llamadas de métodos al momento de generarse. Este método puede ser utilizado para proporcionar información relacionada con la excepción dentro del bloque catch correspondiente: try // instrucciones que pueden fallar catch (Tipo_excepción nombre_variable) nombre_variable.printstacktrace(); Ejemplo Ejemplo Clase RuntimeException Impresión de la información asociada a la excepción 1 public class Par 2 int x, y; 3 public Par(int x, int y ) 4 this.x = x; 5 this.y = y; 6 7 public int divide() 8 try 9 return x/y; 10 catch(arithmeticexception e) 11 e.printstacktrace(); 12 return ; public class Division 2 public static void main(string[] arg) 3 Par par = new Par( 100, 0 ); 4 int res = par.divide(); 5 System.out.println( "El cuociente es: " + res ); 6 7 El objeto excepción es referenciado al interior del bloque catch por medio de la variable e Se invoca el método printstacktrace sobre el objeto excepción 310 El programa ahora indica el tipo de excepción y lugar donde ésta se produjo: Notar que el programa termina su ejecución normalmente. 311 Representa excepciones comunes que se presentan en la JVM durante la ejecución de programas. Ejemplo: NullPointerException. Debido a la ubicuidad de este tipo de excepciones, el compilador permite no especificar el mecanismo de control de las RuntimeExceptions: cuando este mecanismo no es especificado, estas excepciones serán lanzadas fuera del método actual. RuntimeException NullPointerException 312 Clase RuntimeException Crear nuevas excepciones Crear nuevas excepciones Ejemplo: ArithmeticException es subclase de RuntimeException. Por tanto las siguientes implementaciones de la clase Par son equivalentes: public class Par public class Par int x, y; int x, y; public Par(int x, int y ) public Par(int x, int y ) this.x = x; this.x = x; this.y = y; this.y = y; public int divide() public int divide() throws ArithmeticException return x/y; return x/y; Se pueden crear nuevas excepciones extendiendo la clase Exception o una de sus subclases. La clase Exception ofrece distintos constructores que pueden ser referenciados desde las subclases. Los más utilizados son: public Exception(): inicializa la excepción con valores de default (mensaje nulo) public Exception(String mensaje): inicializa la excepción con el mensaje recibido como parámetro. Nota: la clase RuntimeException también puede ser extendida. Ejemplo: public class UnsupportedMediaException extends Exception public UnsupportedMediaException() super( The selected media is not supported. ); Convención: el nombre de las excepciones termina en la palabra Exception

36 Lanzamiento de una excepción Una excepción puede ser lanzada en cualquier parte del código usando la instrucción throw acompañada de la referencia a un objeto excepción: Ejemplo: throw new NombreExcepción( parámetros_constructor ) public void savedata throws UnsupportedMediaException if(!iscompatible( requestedmedia ) ) throw new UnsupportedMediaException(); 316 Ejemplo public class Test public static void main(string[] arg) throws UnsupportedMediaException Recorder r = new Recorder( "CD" ); r.saveon( "DVD" ); System.out.println( "Saved." ); public class Recorder String media; public Recorder( String mediatype ) media = mediatype; public void saveon( String mediatype ) throws UnsupportedMediaException if( media.equals( mediatype ) ) System.out.println( "Saving." ); else throw new UnsupportedMediaException(); public class UnsupportedMediaException extends Exception public UnsupportedMediaException() super( "The selected media is not supported" ); 317 Ejemplo La excepción definida se comporta como cualquier otra excepción: 318 Ejercicio Discusión Ejemplo final Se pide crear la clase Temperature, para registrar temperaturas en grados Celsius (ºC) y Kelvin (ºK): Una instancia de la clase deberá almacenará un valor de temperatura y lo retornará en cualquiera de las escalas. Para ello la clase deberá ofrecer los métodos setc y setk para establecer valores en ºC y ºK, y los métodos getc y getk para retornar los valores en ºC y ºK, respectivamente. Notar que no es físicamente posible admitir temperaturas inferiores a los 0ºK, por lo tanto será necesario generar una excepción (IllegalTemperatureException) cuando un valor fuera de rango trate de ser ingresado. Genere las clases indicadas, y una aplicación que permita ingresar valores y visualizarlos. 319 Considere los siguientes ejemplos: Una clase CuentaCorriente (que maneja una cuenta bancaria) no debe admitir giros mayores que el saldo disponible. En caso de ser inadmisible el giro, éste podría ser impedido: o Retornado false en el método que efectúa el giro. o Generando una excepción en el método que efectúa el giro. En la clase Temperature del ejemplo anterior se genera una excepción cuando se trata de establecer una temperatura inválida. Alternativamente se podría haber obviado la creación de la excepción, y haber retornado falso en los métodos setk y setc. Cuándo conviene generar excepciones? Ejemplo final Bajar código del aula y comenzar a integrar manejo de excepciones a sus aplicaciones! Problemas Problemas en el desarrollo de grandes problemas: Cómo organizar una pieza de software, de manera que sea fácil de mantener y administrar? Cómo evitar tener que recompilar todo un sistema, en vista de un pequeño cambio? Tipo abstracto de dato y orientación a objetos ICI4241 Ingeniería de Software Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso

37 Modularidad y reutilización de software Ideas: Organizar el programa en grupos de subprogramas y datos, lógicamente relacionados, denominados módulos. Agrupar en subprogramas que puedan ser compilados de forma independiente, sin necesidad de recompilar todo el sistema. El proceso de diseñar los módulos o contenedores sintácticos, se denomina modularización. Una unidad de compilación es un conjunto de subprogramas que pueden compilarse. Divide et Impera: descomposición funcional Divide et Impera Descomposición en funciones: el analista descompone el problema en una serie de pasos que permiten resolverlo. Los pasos son refinados sucesivamente, hasta llegar a funciones elementales. Costo? Descomposición funcional ingresardatos(datos); calcularmedia(datos, media); calcularde(datos, de); mostrarresultados(media, de); procedimiento ingresardatos(datos:arreglo) i=0; mientras i <= 10 hacer leer datos[i] i = i + 1; procedimiento calcularmedia(datos:arreglo, media:float) i=0; suma = 0; mientras i <= 10 hacer suma = suma + datos[i] i = i + 1; media = suma / Descomposición funcional: Reutilización de código Encapsulación Encapsulación Programa original.. i=1 mientras i<=10 hacer si a[i]=10 entonces a[i]=0 i=i+1.. i=1 mientras i<=10 hacer si b[i]=10 entonces b[i]=0 i=i+1.. i=1 mientras i<=10 hacer si c[i]=10 entonces c[i]=0 i=i+1. Programa con subrutina.. HacerCeros(a)... HacerCeros(b)... HacerCeros(c)... Procedimiento HacerCeros(x:arreglo) i=1 mientras i<=10 hacer si x[i]=10 entonces x[i]=0 i=i+1 La Encapsulación como agrupación de funciones: La encapsulación permite la agrupación de ideas relacionadas en una unidad, la que posteriormente puede ser referida por un solo nombre. El concepto surgió en la década del 40 con la invención de la subrutina: los programadores se dieron cuenta de que un mismo patrón de instrucciones se podía repetir muchas veces en un programa. Ventajas de Funciones o Subrutinas: Ahorro de memoria de computador (código fuente de programas más corto). Código fuente más entendible : una subrutina agrupa un conjunto de instrucciones en un concepto que una persona puede considerar y manejar como una sola idea (en el ejemplo, HacerCeros) Reutilización antes de la POO Encapsulación en la Orientación a Objetos Encapsulación en la Orientación a Objetos Tipos abstracto de datos ADT Tipo de dato + Operaciones (Abstract (No provisto por Data Type) el lenguaje de programación) Por separado, pero asociadas. Encapsulación: Agrupar un conjunto de subprogramas junto con los datos que ellos manipulan. La encapsulación permite resolver los dos problemas presentados. Ventajas: Mayor modularidad: o Mejor mantención Ventajas: Ocultamiento de la información o Un objeto provee una interfaz para comunicarse con él y abstrae de los detalles de Implementación o Cambios en la información y métodos internos no afectan a otros objetos o Permite ser movido

38 Tipo abstracto de datos en OO Ocultamiento de la información Ocultamiento de la información Un TDA, corresponde a una encapsulación que incluye: La representación de un tipo de dato específico Las operaciones asociadas a ese tipo Una instancia de un TDA se denomina objeto. Mediante control de acceso, detalles innecesarios de la implementación de un TDA se ocultan a aquellas unidades fuera de la encapsulación. Un cliente es una unidad de programa que hace uso de una instancia de TDA. Ejemplo: public class PruebaUsoStack public static void main(string[] args) Stack st = new Stack(5); st.push("hola"); st.push(args[0]); String s; while (st.size()>0) s = st.pop(); System.out.println(s); Problemas de Reuso con TDAs Orientación a objeto en el diseño de lenguajes Visión compitacional OO (Pura) Los TDAs son las unidades a reusar, pero: Generalmente requieren ser adaptadas para el nuevo uso Hacer las modificaciones implicaría entender los detalles de implementación del TDA reutilizado Cómo representar relaciones entre distintos TDAs? Por ejemplo: relación padre-hijo (relación de subordinación) o de similitud de roles. Orientados a Objetos puros (e.g. Smalltalk) Orientados a Objetos no puros Mantienen elementos de otros paradigma (e.g. Java y Eiffel de los imperativos) Lenguajes Extendidos a OO Extensión de imperativo (e.g. C++ y Ada 95) Extensión de funcional (e.g. CLOS) Un programa es un conjunto de objetos (instancias de alguna clase), que corresponden a una abstracción del mundo real (problema) Un objeto se comunica con otro objeto enviando un mensaje a algún método de este último, el cual le puede retornar otro objeto como resultado Procesamiento del mensaje puede alterar el estado del objeto (sus variables internas) Soporte para POO Objetos Mensajes Tipos de Datos Abstractos Clases y Objetos Herencia Simple y múltiple Polimorfismo, con especie particular de ligado dinámico de métodos a mensajes Clases y métodos virtuales en C++ Uso de interfaces en Java Un objeto tiene estado y comportamiento El estado se mantiene en variables El comportamiento se implementa mediante métodos Un objeto encapsula su estado mediante sus métodos (Abstracción de datos) Un objeto controla la manipulación de su estado mediante sus métodos Objetos interactúan enviándose mensajes Un mensaje consiste en: Identificador del objeto Identificador del método Parámetros (si son necesario) Objetos no requieren estar en el mismo proceso o máquina

39 Concepto de clase Clases v/s Objetos Clases: Ejemplo en C++ Introducidas en SIMULA 67 Una clase representa a un conjunto de objetos con características comunes Un objeto es una instancia de una clase Una clase es un molde a partir del cual se crean objetos Una clase puede tener variables (o campos) y métodos de clase (comunes para toda la clase) Una clase define un tipo abstracto de dato Los objetos son instancias de una clase, y por lo tanto ocupan memoria. Se les puede instanciar en forma estática, del stack o del heap (C++ permite las tres formas). Si se crean del heap, su destrucción es explícita o implícita (e.g. C++ es explícita y Java es implícita) Herencia Jerarquía de herencia Herencia: Relaciones entre clases Permite reusar tipos de datos abstractos ya definidos, sin alterarlos. La reutilización se realiza definiendo nuevos TDA que modifican o agregan (datos y/o métodos) al TDA de base. Por lo tanto, permite adaptar un TDA a las condiciones particulares de un problema con menor esfuerzo. Un TDA se denomina clase, y las que heredan de una clase base se denominan clases derivadas (o subclases) Un TDA se deriva de una clase padre denominada superclase En Java se habla de extender una clase El mecanismo de herencia permite extender una clase (agregar variables o métodos) Si B extiende a A, entonces B hereda todo lo de A (la superclase), siendo la clase heredera B una subclase de A Una subclase heredera puede implementar a su manera un método heredado (overwrite) Herencia: Ventajas Herencia Múltiple Subclases proveen comportamiento especializado en base a la superclase Los programadores pueden definir clases abstractas, que definen un comportamiento genérico, que debe ser específicamente definido por las clases herederas. En resumen, representan un mecanismo de reutilización de interfaces y código. 349 La nueva clase hereda sus propiedades a partir de dos o más clases. Problemas: Colisión de nombres introduce una complicación Pérdida de eficiencia por su mayor complejidad (en el ligado de los métodos) No está claro que su uso mejore el diseño y mantención de sistemas, considerando la mayor complejidad de organización 350 Resolución de problemas y encapsulación ICI4241 Ingeniería de Software Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso 39

40 Problema Implementación computacional Implementación computacional El mundo de la aspiradora: Dos posiciones A y B, inicialmente con polvo, y una aspiradora que parte en la posición B. La aspiradora aspira el polvo de la posición en que se encuentra. A B Ejemplo de implementación en Java: Vector de polvo implementado como arreglos booleano, aspiradora como índice de posición : boolean[] polvo; int aspiradora; = polvo = true; true aspiradora = 1; public class MiOficina public static void main(string[] arg) boolean polvo = new boolean[2]; int aspiradora; polvo[0] = true; polvo[1] = true; aspiradora = 1; // Limpiar polvo[aspiradora] = false; System.out.println( Sección + aspiradora + limpia ); if(aspiradora == 0) aspiradora = 1; else aspiradora = 0; Implementación computacional Mejorando la implementación: Encapsulamiento Mejorando la implementación: Encapsulamiento Es conveniente la implementación anterior? A favor: Implementación (aparentemente) bastante simple. En contra: Aplicación debe manejar detalles de la estructura: (Ej. Subíndices). Reutilización de código imposible o limitada: (Ej. Si deseo implementar la aplicación MiCasa). 355 Podrían incluirse validaciones para las posiciones public class Mundo boolean[] polvo = new boolean[2]; int aspiradora; public void setpolvo(int lugar) polvo[lugar] = true; public void setaspiradora(int lugar) aspiradora = lugar; public void limpiar() polvo[aspiradora] = false; public boolean estálimpio(int i) return polvo[i]; 356 public class Oficina public static void main(string[] arg) Mundo mundo = new Mundo(); // Ensuciamos todo mundo.setpolvo( 0 ); mundo.setpolvo( 1 ); // Ubicamos la aspiradora mundo.setaspiradora( 1 ); mundo.limpiar(); if( mundo.estálimpio(0) && mundo.estálimpio(1)) System.out.println( El mundo está totalmente limpio. ); if(aspiradora == 0) // Mueve aspiradora mundo.setaspiradora( 0 ); else mundo.setaspiradora( 1 ); mundo.limpiar(); 357 Mejorando la implementación: Encapsulamiento Nueva propuesta de implementación Nueva propuesta de implementación Comentarios acerca de la implementación: La clase Mundo: o Oculta bastantes detalles de implementación o Es reutilizable Pero, bastantes puede no ser suficiente: o La aplicación es todavía responsable de manejar la lógica del mundo (Ej.: al mover la aspiradora debe además invocar el método limpiar). o La aplicación accede a detalles de implementación (subíndices) public class Mundo boolean[] polvo = new boolean[2]; int aspiradora; public static final LUGAR_A = 0; public static final LUGAR_B = 1; public void setpolvo() polvo[lugar_a] = true; polvo[lugar_b] = true; public void setaspiradora(int lugar) aspiradora = lugar; limpiar(); public void limpiar() polvo[aspiradora] = false; public boolean estálimpio() return polvo[lugar_a] && polvo[lugar_b]; public void moveraspiradora() aspiradora = ( aspiradora == LUGAR_A? LUGAR_B: LUGAR_A); limpiar(); public class Oficina public static void main(string[] arg) Mundo mundo = new Mundo(); // Ensuciamos todo mundo.setpolvo(); // Ubicamos la aspiradora mundo.setaspiradora( Mundo.LUGAR_B ); if( mundo.estálimpio()) System.out.println( El mundo está totalmente limpio. ); // Mueve aspiradora mundo.moveraspiradora(); Los detalles de implementación están completamente ocultos

41 Principios de POO ICI4241 Ingeniería de Software Escuela de Ingeniería Informática Pontificia Universidad Católica de Valparaíso De problemas a soluciones Análisis: entender el problema y sus requerimientos Diseño: determinar un modelo que nos permita resolver el problema. Implementación: determinar la forma de representar el modelo que describe el problema (y la solución): Requerimientos Los requerimientos: son incompletos usualmente están equivocados son engañosos (y los usuarios también) no cuentan la historia completa Por lo tanto, los requerimientos siempre cambian Desarrollo de proyectos Metodologías y modelos Metodologías y modelos La Ingeniería de Software provee: Metodologías de desarrollo: o Desarrollo en cascada o Proceso Unificado o etc. Modelos para soportar el desarrollo: o Especificación estructurada (DFDs, MER, etc.) o UML o etc. La Ingeniería de Software provee: Lenguajes para la implementación o C, C++ o Java o etc La programación orientada a objetos POO v/s descomposición funcional Identificación de objetos El paradigma de la Orientación a Objetos es sucesor de la descomposición funcional Se centra en el concepto de Objeto: Objeto = Datos + Métodos Los objetos: son responsables de si mismos. saben de qué tipo son. conocen su propio estado (datos). contienen el código que les permite actuar. 367 El modelo de programación funcional mantenía centralizadas las responsabilidades: Una cena en la cual un garzón pide a cada comensal lo que se servirá, y luego les trae los platos solicitados. El modelo de programación OO provee delegación de responsabilidades: Una cena en la cual a los comensales se les indica la distribución del buffet. Ellos se sirven a su propio gusto. 368 En problemas pequeños una técnica sencilla se basa en la identificación de sustantivos y verbos : Los sustantivos pueden ser objetos Los verbos pueden ser métodos

Java: un rápido repaso

Java: un rápido repaso Java: un rápido repaso Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile fguidi@ucv.cl Desarrollo y ejecución de aplicaciones en Java public class

Más detalles

Java: un rápido repaso

Java: un rápido repaso Desarrollo y ejecución de aplicaciones en Java Java: un rápido repaso public class Hola { public satic void i =1; System.out. Compilador Java Código fuente Franco Guidi Polanco Escuela de Ingeniería Industrial

Más detalles

Introducción a la Programación en Java

Introducción a la Programación en Java Contenido Introducción a la Programación en Java Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile fguidi@ucv.cl! Generalidades de Java! Elementos

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez Elementos de lenguaje: Identificadores Tipos de datos 2 Tipos de datos primitivos 3 Tipos de datos referenciados Clases Interfaces Arrays

Más detalles

Construcciones del Lenguaje Java

Construcciones del Lenguaje Java Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.

Más detalles

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto

Más detalles

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos Lección 2: Creando una Aplicación en Java 1. Estructura del archivo de una clase 2. Usando una clase 3. Definiendo clases fundamentos Objetivos Conocer: La forma en la cual está se está estructurado el

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Operadores y Expresiones rcoppo@uns.edu.ar Primer programa en Java 2 Comentarios en Java Comentario tradicional (multi-línea) Comentario de línea Comentario

Más detalles

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales

Más detalles

3.3 Conceptos Básicos del Lenguaje Java

3.3 Conceptos Básicos del Lenguaje Java 3.3 Conceptos Básicos del Lenguaje Java Conjunto de Caracteres Java utiliza Unicode, un conjunto de caracteres de 16 bits Java permite leer ASCII de 7-bit o Latin-1, conviertiéndolo a Unicode Son pocos

Más detalles

Expresiones y sentencias

Expresiones y sentencias Expresiones y sentencias Expresión Construcción (combinación de tokens) que se evalúa para devolver un valor. Sentencia Representación de una acción o una secuencia de acciones. En Java, todas las sentencias

Más detalles

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1 Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos

Más detalles

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

1. Cuántas sentencias hay en la secuencia principal del siguiente programa? 1. Cuántas sentencias hay en la secuencia principal del siguiente programa? public class PruebaSwitch { System.out.print ("Opcion: "); case 3: System.out.println ("miércoles "); A. 1. B. 4. C. Más de 10.

Más detalles

Strings en Java. String es una clase, no un tipo primitivo. Las variables de tipo String, en cualquier instante, pueden contener:

Strings en Java. String es una clase, no un tipo primitivo. Las variables de tipo String, en cualquier instante, pueden contener: Strings en Java Manejo básico de cadenas de caracteres y archivos de texto en Java Prof. Franco Guidi Polanco, Ph.D. Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Más detalles

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 1 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 2 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo

Más detalles

Java para programadores

Java para programadores Java para programadores Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) montenegro@fdi.ucm.es Contenidos Variables. Tipos

Más detalles

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript Algoritmo

Más detalles

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica Tema 2: Desarrollo de Algoritmos E.E. de Algorítmica Temas a tratar Identificadores Variables Constantes Tipos de Datos Separadores Operadores Aritméticos Unarios Relacionales y Condicionales Nivel de

Más detalles

Tema 2. El lenguaje JAVA

Tema 2. El lenguaje JAVA Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias

Más detalles

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los

Más detalles

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas Unidad II Fundamentos de programación en Java Ing. José Luis Llamas Cárdenas En java para poder escribir se emplea el objeto System.out, t pero para leer del teclado es necesario emplear System.in Et Este

Más detalles

Guía - Taller # 2 (JAVA)

Guía - Taller # 2 (JAVA) CEET - Distrito Capital Programa de Formación: ADSI 150752 TRIMESTRE VI Conocimiento de Conocimiento: Aplicar diversos estilos de Programación usando herramientas para Desarrollo Web Instructor: Ing. Espec.

Más detalles

Programación en java. Estructuras algorítmicas

Programación en java. Estructuras algorítmicas Programación en java Estructuras algorítmicas Estructuras algoritmicas 1. Conceptos basicos 1. Dato 2. Tipos de datos 3. Operadores 2. dsd Conceptos Basicos DATO: se considera una representación simbólica

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

Programación en Lenguaje C

Programación en Lenguaje C Lenguaje de programación C Programación en Lenguaje C Introducción El Lenguaje de programación C fue implantado por primera vez en los años 70 por Dennis Ritchie para una computadora DEC PDP-11 corriendo

Más detalles

Expresiones y sentencias

Expresiones y sentencias Expresiones y sentencias Expresión Construcción (combinación de tokens) que se evalúa para devolver un valor. Sentencia Representación de una acción o una secuencia de acciones. En C, todas las sentencias

Más detalles

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez Sintaxis de Java Sintaxis Define las reglas que determinar el uso de palabras clave, operadores y variables para construir y evaluar expresiones.

Más detalles

Lenguaje Orientado por Objetos Simple, Poderoso y Fácil de aprender Robusto Interactivo Arquitectura neutral Interpretado y de alto desempeño

Lenguaje Orientado por Objetos Simple, Poderoso y Fácil de aprender Robusto Interactivo Arquitectura neutral Interpretado y de alto desempeño Programación Orientada a Objetos Introducción a Java Angela Carrillo Ramos Java: Lenguaje de Programación Por qué surge un lenguaje? Para adaptarse a los cambios de entorno y usos: Independencia de la

Más detalles

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC. Programación n Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño o Vargas MsC. Variables y expresiones aritméticas Variables Conceptos de Memoria Una variable es un espacio en la memoria

Más detalles

Lección 2 Introducción al lenguaje C

Lección 2 Introducción al lenguaje C Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)

Más detalles

Sintaxis básica, variables y 7pos

Sintaxis básica, variables y 7pos Contenidos Sintaxis básica, variables y 7pos Curso de Programación en Java! Sintaxis básica! Variables y 7pos! Entrada/Salida básica! Operadores y expresiones Jesús Montes Sánchez jmontes@fi.upm.es Estructura

Más detalles

Lenguaje de programación con JAVA

Lenguaje de programación con JAVA Pág. N. 1 Lenguaje de programación con JAVA Familia: Editorial: Autor: Tecnología de la información y computación Macro Eric Gustavo Coronel Castillo ISBN: 978-612-304-288-2 N. de páginas: 360 Edición:

Más detalles

TEMA 2. Agenda. Fundamentos de JAVA

TEMA 2. Agenda. Fundamentos de JAVA TEMA 2 Fundamentos de JAVA V1.3 Manuel Pereira González Agenda Introducción Historia de Java Características Principales Hello World Tipos Operadores Control de Flujo E/S básica Atributos y Métodos Resumen

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo rcoppo@uns.edu.ar Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación

Más detalles

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

Más detalles

Fundamentos de JAVA. Angel Kuri Enero, /2/2006

Fundamentos de JAVA. Angel Kuri Enero, /2/2006 Fundamentos de JAVA Angel Kuri Enero, 2006 Enunciados y Expresiones Los siguientes son enunciados sencillos: int i = 1 import java.awt.font System.out.println( Esta moto es una + color + + marca); m.enginestate

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Ficha de Aprendizaje N 13

Ficha de Aprendizaje N 13 Ficha de Aprendizaje N 13 Curso: Lógica y lenguaje de programación Tema: Fundamentos de programación Duración: 2 horas pedagógicas Logros de aprendizaje Identifica los diferentes tipos de operadores que

Más detalles

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA FUNDAMENTOS DE INFORMÁTICA Tema 1 Introducción a la Programación en Visual Basic Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo undamentos de Informática. Departamento de Ingeniería

Más detalles

Tema 2. El lenguaje de programación Java (Parte 1)

Tema 2. El lenguaje de programación Java (Parte 1) Programación en Java Tema 2. El lenguaje de programación Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Elementos del lenguaje (I) El juego de caracteres. No utiliza ASCII, sino Unicode de

Más detalles

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Variables Conceptos de Memoria Una variable es un espacio en la memoria del PC Cada variable tiene un nombre, un tipo, un tamaño y un valor

Más detalles

Tema: Estructuras de Selección en C#.

Tema: Estructuras de Selección en C#. Programación I, Guía 4 1 Tema: Estructuras de Selección en C#. Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación I Objetivos Utilizar las instrucciones de selección if e

Más detalles

Universidad Autónoma de Tlaxcala. M.C. José Juan Hernández Mora. Primera Sesión

Universidad Autónoma de Tlaxcala. M.C. José Juan Hernández Mora. Primera Sesión Universidad Autónoma de Tlaxcala Introducción al lenguaje JAVA Primera Sesión 1. Introducción a la programación orientada a objeto 2. Introducción al lenguaje Java 3. Primer programa en Java 4. Primer

Más detalles

Introducción rápida a la programación (estructurada ) con C++

Introducción rápida a la programación (estructurada ) con C++ Introducción rápida a la programación (estructurada ) con C++ A B No A? Si B A Los Bloques pueden ser una línea de código o un modulo (función o subrutina) que pueden estar contenido en otro archivo de

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * / undamentos de sintaxis en algunas instrucciones de C#.Net Dr. Ramón Roque Hernández Identificadores Un identificador le da nombre único a un elemento en un programa (ariables, procedimientos, etc.). No

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos 1.1 Tipos de Datos Primitivos 1.2 Tipos de datos estructurados 1.2.1 Arreglos unidimensionales, bidimensionales y cadenas de caracteres 1.2.2 Registros o Estructuras (unión y estructura) 1.3 Definición

Más detalles

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores Programación Orientada a Objetos Resumen de Temas Unidad 3: Constructores y destructores 3.1 Conceptos de métodos constructor y destructor Java inicializa siempre con valores por defecto las variables

Más detalles

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid. ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid. Indíce Algoritmo Elementos de un algoritmo: Variables, Constantes, Expresiones Datos: Definición y

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 2 Nombre: El lenguaje de programación C Contextualización Una constante en todos los lenguajes de programación (viejos y nuevos) es la implementación

Más detalles

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

Más detalles

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga Programación orientada a objetos Resumen de Temas Unidad 4: Sobrecarga 4.1 Conversión de tipos (1) Conversiones implícitas: La conversión entre tipos primitivos se realizan de modo automático de un tipo

Más detalles

Estructuras de Datos Declaraciones Tipos de Datos

Estructuras de Datos Declaraciones Tipos de Datos Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación

Más detalles

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola) Objetivos de la sesión Entender el tipo de programas que se pueden realizar con aplicaciones de consola. Conocer el concepto de variable, la forma en que se declaran y su utilización. Conocer la forma

Más detalles

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11 Índice INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11 1.1 PROGRAMA Y LENGUAJESDE PROGRAMACIÓN...12 1.1.1 EL LENGUAJE JAVA...13 1.1.2 EL JDK...15 1.1.3 LOS PROGRAMAS EN JAVA...16

Más detalles

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Expresiones Aritméticas Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Expresiones Aritméticas El computador puede realizar cálculos además de mostrar datos por pantalla.

Más detalles

Tema: Clases y Objetos en C#. Parte II.

Tema: Clases y Objetos en C#. Parte II. Programación II. Guía No. 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C#. Parte II. Objetivos Implementar clases, objetos, propiedades, métodos y

Más detalles

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes Introducción Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Qué es la POO?! Un paradigma de programación! Un paradigma es una forma de afrontar

Más detalles

PHP: Lenguaje de programación

PHP: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad

Más detalles

REPRESENTACIÓN DE DATOS

REPRESENTACIÓN DE DATOS REPRESENTACIÓN DE DATOS Tipos de datos primitivos Tipos de Datos Estructurados TIPOS DE DATOS SIMPLES O PRIMITIVOS Dato Longitud Rango 2 TIPOS DE DATOS SIMPLES O PRIMITIVOS Surgen de la necesidad de tener

Más detalles

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos Construyendo clases nuevas La forma más simple de una clase en Java es: Class Nombre_de_la_Clase { } /* constructores */ /* métodos

Más detalles

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo - Introdución a Java - Breve historia de Java - Características del lenguaje Java - Estructura del JDK 1.6 - Documentación del API (JavaDoc) - Instalar y configurar el ambiente de desarrollo - La variable

Más detalles

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones. Palabras reservadas de C++ y C Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones. A continuación se muestra el link del listado de palabras

Más detalles

Programación estructurada (Introducción a lenguaje C)

Programación estructurada (Introducción a lenguaje C) Programación estructurada (Introducción a lenguaje C) M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 15-I Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada

Más detalles

Introducción al lenguaje de programación java

Introducción al lenguaje de programación java Introducción al lenguaje de programación java Algoritmia y Programación Slide 1 LENGUAJES DE PROGRAMACION Un lenguaje de programación es un idioma artificial diseñado y creado para expresar algoritmos

Más detalles

Computación II. Introducción a Visual Basic

Computación II. Introducción a Visual Basic Computación II Introducción a Visual Basic Introducción a Visual Basic Microsoft Visual Basic es un conjunto de herramientas que posibilitan el desarrollo de aplicaciones para Windows de una manera rápida

Más detalles

Curso de Programación Avanzada en C

Curso de Programación Avanzada en C Curso de Programación Avanzada en C Copyright, 1996 Universidad Sim on Bol ivar 1 Prof. Mariela J. Curiel Contenido del Curso Conceptos BásicosB Estructuras de Control Arreglos Otros tipos de datos derivados

Más detalles

5. Sentencias selectivas o condicionales

5. Sentencias selectivas o condicionales 60 A. García-Beltrán y J.M. Arranz 5. Sentencias selectivas o condicionales Objetivos: a) Describir el funcionamiento de las sentencias selectivas o condicionales (if-else y switch) b) Interpretar el resultado

Más detalles

2.2 Nombres, Ligado y Ámbito

2.2 Nombres, Ligado y Ámbito 2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el

Más detalles

Universidad Autónoma del Estado de México Facultad de Medicina

Universidad Autónoma del Estado de México Facultad de Medicina Universidad Autónoma del Estado de México Facultad de Medicina Licenciatura en Bioingeniería Médica Unidad de Aprendizaje: Algoritmos y programación básica Unidad 3: Estructuras de control de flujo en

Más detalles

Por el contrario System.in es un byte Stream sin caracteristicas de character Stream.

Por el contrario System.in es un byte Stream sin caracteristicas de character Stream. I/O desde la linea de Comandos Los programas normalmente tienen funcionalidades para el ingreso o captura de datos desde la linea de comandos. La plataforma Java soporta estas iteracciones de dos formas:

Más detalles

Taller de Programación I. Introducción a Java

Taller de Programación I. Introducción a Java INACAP Universidad Tecnológica de Chile Sede Santiago Centro Taller de Programación I Curso Java J2SE Introducción a Java Ing. Manuel López Ramos Parte I Qué es Java? Qué es Java? Java normalmente es considerado

Más detalles

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System. CICLO: 01/2010 Universidad Don Bosco Materia: Lenguaje de Programación III Contenido: 1-Lectura de Datos de entrada. 2-Introduccion a JOPTIONPANE. 3-Estructuras de Control. ->LECTURA DE DATOS DE ENTRADA

Más detalles

Operadores y Expresiones

Operadores y Expresiones Operadores y Expresiones Los programas Java constan de datos, sentencias de programas y expresiones. Una expresión es normalmente, una ecuación matemática, tal como 3 * x + 5 * z. En esta expresión, los

Más detalles

Características de Lenguajes de Scripts

Características de Lenguajes de Scripts Lenguaje JavaScript Objetivos Conocer las características de los lenguajes de scripts en general y específicamente de JavaScript Conocer los Tipos de Páginas Web y cuando deben utilizarse. Conocer la sintaxis

Más detalles

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani Informática JavaScript: Lenguaje de programación Fco J. Martín Mateos Carmen Graciani Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal:

Más detalles

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Tema 7.- Fundamentos de la Programación Orientada a Objetos Tema 7.- Fundamentos de la Programación Orientada a Objetos 7 de enero de 2014 Objetivos Saber definir clases propias. Saber crear objetos de una clase determinada e interactuar con ellos (Problema 1).

Más detalles

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia Programación orientada a objetos Resumen de Temas Unidad 5: Herencia 5.1 Introducción a la Herencia La herencia es el mecanismo fundamental de relación entre clases en la orientación a objetos. Relaciona

Más detalles

C.I.F.: B Inscrita en el Registro Mercantil de Madrid, Tomo Libro 0, Folio 135, Sección 8. Hoja M Inscripción 1ª

C.I.F.: B Inscrita en el Registro Mercantil de Madrid, Tomo Libro 0, Folio 135, Sección 8. Hoja M Inscripción 1ª INTRODUCCIÓN A JAVA QUÉ ES JAVA Introducción ORGANIZACIÓN JME (Mobile / Wireless) JSE (Core / Desktop) JEE (Enterprise / Server) LA HISTORIA El comienzo Aparición de Internet Por qué el nombre JAVA DESARROLLO,

Más detalles

Tema 4. Excepciones en Java

Tema 4. Excepciones en Java Programación en Java Tema 4. Excepciones en Java Luis Rodríguez Baena Facultad de Informática Excepciones (I) Permiten la captura de errores en tiempo de ejecución. El control de excepciones permite extraer

Más detalles

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos

Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos Taller de Programación Estructurada en Java Tema 2. Fundamentos de la programación orientada a objetos Ingeniero en Computación José Alfredo Cobián Campos josealfredocobian@gmail.com Facultad de Ciencias

Más detalles

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Creación de un objeto. Creación de un objeto. Creación de un objeto

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Creación de un objeto. Creación de un objeto. Creación de un objeto Programación Orientada a Objetos con Java Rafael Rivera López Elementos Básicos del Lenguaje Java II Ingeniería en Sistemas Computacionales Agosto-Diciembre de 24 Veracruz, Ver. Creación de un objeto Una

Más detalles

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación TUTORIAL PSEINT Ing. Ronald Rentería Ayquipa Fundamentos de Programación PSEINT Página Oficial: http://pseint.sourceforge.net/ Es un software que interpreta pseudocódigo. Permite la generación de diagramas

Más detalles

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador). CAPÍTULO 4 Requerimientos de software Este capítulo presenta las herramientas necesarias para la construcción y ejecución de programas en el lenguaje de programación JAVA, los requerimientos mínimos de

Más detalles

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Métodos que devuelven valor Dado el siguiente triángulo rectángulo: Métodos que devuelven valor Dado el siguiente triángulo rectángulo: hipotenusa altura base Para dibujar este triángulo necesitamos los siguientes datos: base y altura La base y la altura, se utilizarán

Más detalles

Destrucción de objetos (I)

Destrucción de objetos (I) Clases y Objetos (3) Presentación basada en: 1. Como Programar en Java. Deitel y Deitel. Ed. Prentice-Hall. 1988 2. Java 2., Curso de programación. Fco. Javier Ceballos. Ed. Alfoomega&RA-MA, 2003. 3. Apuntes

Más detalles

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA Nombre del Módulo: PROGRAMACIÓN EN JAVASCRIPT Código: CSTI0087 total: 51 Horas Objetivo General: Crear contenido web basado en

Más detalles

Datos y tipos de datos

Datos y tipos de datos Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato

Más detalles

Programación en Visual Basic Ricardo Rodríguez García

Programación en Visual Basic Ricardo Rodríguez García Manual Básico de Programación en Visual Basic 1.- Estructura de un proyecto Visual Basic Los programas o aplicaciones desarrolladas en Visual Basic van a constituir un único paquete que denominaremos proyecto.

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

Fundamentos de Programación 2017-I

Fundamentos de Programación 2017-I Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis

Más detalles