I ANTECEDENTES 1.1 En la Programación Estructurada y la Programación Procedural lo mas importante es el procedimiento que se esta desarrollando a través de un lenguaje de programación. 1.2 En Programación Orientada a Objetos, se hace un gran énfasis a los datos, y todo gira alrededor de ellos. 1.3 El resultado es un lenguaje que se ha mostrado ideal para desarrollar aplicaciones de usuario final seguras, distribuidas y basadas en red en un amplio rango de entornos desde los dispositivos de red embebidos hasta su uso para soluciones en Internet. 1.4 Características en el Diseño de Java : - Sencillo, orientado a objetos y familiar - Robusto y seguro - Independiente de la arquitertura y portable - Alto rendimiento: - Interpretado, multi-hilo y dinámico 1.5 Características del Lenguaje - Lenguaje de propósito general - Lenguaje Orientado a Objetos. - Sintaxis inspirada en la de C/C++. - Lenguaje multiplataforma: Los programas Java se ejecutan sin variación (sin recompilar) en cualquier plataforma soportada (Windows, UNIX, Mac, etc.) -- Lenguaje interpretado: El intérprete a código máquina (dependiente de la plataforma) se llama Java Virtual Machine (JVM). El compilador produce un código intermedio independiente del sistema denominado bytecode ó código byte. -- Lenguaje gratuito: Creado por SUN Microsystems, que distribuye gratuitamente el producto base, denominado JDK (Java Development Toolkit) o actualmente J2SE (Java 2 Standard Edition). -- API distribuida con el J2SE muy amplia. Código fuente de la API disponible. Explique los siguientes términos, haciendo hincapié en las dif erencias: Java 2 Estándar Edition (J2SE) vs Ja va Runtime Environment (JRE) Explicar los siguiente conceptos: - Independiente de la arquitertura y portable: II Utilizando Clases Definidas en Java Una aplicación es una clase de Java que corre como una específica aplicación en cualquier ambiente operativo, puede tener referencias a archiv os, interfaz gráfica (si se desea), etc. Un applet es una clase de Java que corre dentro de un navegador y que no puede hacer referencias a archivos, también posee su interfaz gráfica. Aplicación public class Hola { public static void main(String args[]) { System.out.println("Hola a todos"); } } Esto sería una aplicación con interfaz modo texto para desplegar un Hola. - La aplicación anterior utiliza un método llamado println(), explique este método. - A continuación se muestra un ejemplo de aplicación gráfica: import java.awt.*; import java.applet.*; public class AppletDibujos1 extends Applet { public void paint(Graphics g) { g.drawString("Hola", 100, 100); } } Explique las siguientes instrucciones: import java.applet.* extends Applet public void paint(Graphics g) g.drawString("Hola", 100, 100); Modifique la anterior aplicación grafica para que dibuje la palabra FITEC en la posición: 20,20 Tipos de Datos, Variables y Operadores En Java existen dos categorías de tipos de datos: * Los tipos primitivos son los que permiten manipular valores numéricos (con distintos grados de precisión), caracteres y valores boléanos (verdadero / falso). * Referencias. Las cuales corresponden a clases y objetos que se tratarán posteriormente. Tipos primitivos Los Tipos Primitivos son: boolean: Puede contener los valores true o false. byte: Enteros. Tamaño 8-bits. Valores entre -128 y 127. short: Enteros. Tamaño 16-bits. Entre -32768 y 32767. int: Enteros. Tamaño 32-bits. Entre -2147483648 y 2147483647. long: Enteros. Tamaño 64-bits. Entre -9223372036854775808 y 9223372036854775807. float: Números en coma flotante. Tamaño 32-bits. double: Números en coma flotante. Tamaño 64-bits. char: Caracteres. Tamaño 16-bits. Unicode. Desde '\u0000' a '\uffff' inclusive. Esto es desde 0 a 65535 Variables Una variable es un área en memoria que tiene un nombre y un Tipo asociado. El Tipo es o bien un Tipo primitivo o una Referencia. Nomenclatura: El ; es el separador de instrucciones en Java. El símbolo // indica comentarios de línea, se ponen después de una instrucción para comentarla, el compilador no las toma al detectarlas. En Java las mayúsculas y minúsculas son significativas. No es lo mismo el nombre letra que Letra. Todas las palabras reservadas del lenguaje van en minúsculas. El nombre de una Clase en Java, la primera letra es Mayúscula y todas las demás en minúscula, por el contrario los objetos van en minúscula. La declaración y la asignación se pueden combinar en una sola expresión: int i = 5 ; char letra = 'c'; boolean flag = false ; Operaciones Básicas En java al igual que en C++ se tienen una serie de operadores que ayudan a obtener cálculos, dependiendo de los valores a utilizar, Java trabaja con los siguientes operadores: Operadores Aritméticos El operador / funciona de diferente manera si trabaja con datos de tipo entero o de tipo flotante. Con datos de tipo flotante funciona de la manera tradicional; pero al realizarse una división entre dos números enteros, el operador / regresa el cociente de la división entera; es decir, regresa la parte entera del resultado (si hay fracción la elimina). Por ejemplo: 7/3 da como resultado 2 pero 7.0/3.0 da como resultado 2.3333.. El operador % calcula el residuo de la división entera y sólo existe para datos de tipo entero Por ejemplo: 10 %3 da como resultado 1 Otros Operadores aritméticos En Java, al igual que en C++, existen también los siguientes operadores aritméticos: ++ incremento -- decremento Es decir: x++ ó ++x es equivalente a x = x+1 x-- ó --x es equivalente a x = x-1 Estos operadores son unitarios, es decir, trabajan con un solo operando y solamente se pueden utilizar con variables de tipo entero. Los operadores se pueden utilizar antes o después del nombre de la variable y funcionan de diferente manera: Si se ponen antes, primero se realiza la operación (incremento o decremento) y luego se utiliza el valor de la variable en la expresión en la que se encuentre. Si se pone después, primero se utiliza el valor de la variable en la expresión y luego se lleva a cabo la operación (incremento o decremento). Por ejemplo: Supón que a = 10 y c = 4 La operación v = a * c++; v toma el valor de 40 y c queda con el valor de 5 La operación v = a * ++c; v toma el valor de 50 y c queda con el valor de 5 Algunos Métodos Matemáticos Predefinidos Java contiene una serie de métodos matemáticos que puedes utilizar en tus clases, para realizar algún cálculo, son tomados de la clase Math, esta viene dentro del paquete java.lang, entonces para poder tomarlos dentro de una clase debes de usar la instrucción import java.lang.Math; Antes de iniciar tu applet o aplicación. Algunos de los métodos a utilizar son: pub lic final static double e da el valor de e. pub lic final static doub le PI da el valor de pi. pub lic static int abs(int a) da el valor ab soluto de un entero dado. pub lic static long abs(float a) da el valor ab soluto de un numero de punto flotante. pub lic static doub le cos(doub le a) que te da el coseno de un valor de dob le precisión. pub lic static doub le exp(doub le a) te da el valor de e a para un valor a de dob le precisión. pub lic static doub le pow(double a, double b ) te da el valor de ab para a y b de dob le precisión. pub lic static double sqrt(doub le a) ob tiene el valor de la raíz cuadrada de un valor a de dob le precisión. ¿Cómo se utilizan? Lo anterior es la definición de cada uno de los métodos de la clase Math, vamos a entender el uso de uno de ellos. public static double sqrt(double a) obtiene el valor de la raíz cuadrada de un valor a de doble precisión. La definición anterior describe que sqrt es un método de tipo double y el parámetro que toma es un double, entonces algunos ejemplos de su uso son: En ejemplo 1 vemos claramente como a b le será asignado el valor real 5.0, ya que esa es la raíz cuadrada de 25.0 Lectura de Datos Dentro de un applet es sencillo tomar algún dato del usuario para realizar algún cálculo. Es difícil explicar detalladamente los dif erentes objetos en este momento que requieres para tomar un dato de la ventana del applet, cada objeto utilizado será explicado detalladamente en unidades posteriores, pero es importante que ya empieces a tomar datos del usuario, es por eso que te daremos los objetos más simples en este momento. Esto se hace a través de crear un objeto de la clase TextField, el cual sirve para que el usuario teclee algún dato dentro del objeto, en la clase TextField existen diferentes métodos, es necesario utilizar el método getText() para tomar el dato del usuario y este método regresa un objeto de la clase String (cadena de caracteres), el cual se debe pasar a entero o número de punto flotante, utilizando la clase Integer o utilizando la clase Double (revisar ejemplo abajo). Dentro de un Applet el método paint nos sirve para dibujar. En el método constructor (método con el mis mo nombre de la clase) creamos objetos de la clase de elementos de interfaz gráfica, como TextField, TextArea, Label, Button, etc., y se añaden a la ventana del applet con el método add. Cuando tomamos un dato del usuario, la manera que este le dice al applet que ya ha introducido el dato y quiere hacer el cálculo es dando un clic a un botón, el cual es creado dentro del applet por medio de la clase Button, para poder introducir las instrucciones para hacer algún cálculo cuando el usuario ya dio clic en el botón, debemos introducir éstas en el método actionPerformed, este método pertenece a la clase ActionListener, es entonces que la clase que estamos escribiendo que hereda de la clase Applet (clase AppletDaCuadrado en este caso), debe implementar la clase ActionListener para poder utilizar este método y dar instrucciones para cuando se da clic en el botón. Es decir cuando queremos utilizar un Applet debemos heredar de la clase Applet, esto lo hacemos en la misma declaración de la clase: public class AppletDaCuadrado extends Applet { Habiendo definido previamente la instrucción import java.applet.*; el cual toma la clase Applet previamente definida por Java en la API. Si un applet requiere utilizar elementos gráficos que el usuario utilizará para definir que requiere una acción como la de dar un clic en un botón, entonces ese Applet necesita implementar la interface ActionListener, la cual tiene métodos que ayudan a definir acciones para cuando el usuario da un clic en un botón, quedando entonces la declaración del applet como: public class AppletDaCuadrado extends Applet implements ActionListener { Es importante que no te sientas muy presionado por tener una serie de métodos nuevos, dentro de la clase Applet, pero pronto entre más ejercicios realices, más fácil te será entender estos nuevos métodos. Que hace el siguiente método: public void actionPerformed(ActionEvent ae) { double num = Double.parseDouble(t1.getText()); t2.setText(""+Math.pow(num,2.0)); } Explque la sig. linea b.addActionListener(this); POO. Generalidades Esta tecnología ofrece beneficios inherentes que dan ventajas a nivel técnico y de dirección de proyectos. Por los anterior a desplazado a otras(basadas en transacciones). Esta tecnología se empezó a usar hace 20 años. Pero sus orígenes son de hace aproximadamente 40 años. Motivación Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra ve z los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO. Aquí se consigue que el código se pueda reutilizar. Cómo se piensa en objetos Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o estacionarse. Pues en un esquema POO el coche sería el ob jeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar. Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2. La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc. estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas. * Una clase define el molde con el que construiremos muchos objetos que tendrán la misma estructura. * Es una abstracción que describe características comunes de los objetos que se podrán crear. Propiedades en clases (variables) Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos. Comportamiento (Métodos en las clase s) Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones que están asociadas a un objeto. OBJ ETOS Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto. * * Una instancia es un objeto creado a partir de una clase Cada instancia tiene identidad única. Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta dependiendo el lenguaje de programación que se emplee, pero será algo parecido a esto. miCoche = new Coche() Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuación. Dentro de los paréntesis podríamos colocar parámetros con los que inicializar el objeto de la clase coche. Estructura de los objetos Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc. 1. Información: Definición de POO Estados en objetos * Básicamente es un conjunto de técnicas que permiten modelar y construir sistemas * Los sistemas generadores están compuestos por objetos que interactúan entre si CLASES Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Es to quiere decir que la definición de un objeto es la clase. Cuando programamos unobjeto y definimos sus características y funcionalidades en realidad lo que -Los objetos almacenan información en atributos 2. Comportamiento: -El comportamiento de los objetos esta determinado en el conjunto de operaciones (métodos) que ofrecen. 3. Pueden combinarse objetos mediante relaciones de herencia o composición. Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de una propiedad de un objeto se llama estado. Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto. miCoche.color = rojo El objeto es miCoche, luego colocamos el operador punto y por último el nombre de la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignación. Mensajes en objetos Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasándole el mensaje “ponte en marcha”. Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar. miCoche.ponerseEnMarcha() En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis igual que cualquier llamada a una función, dentro irían los parámetros. Herencia Permite definir un objeto a partir de otro. La herencia sirve para crear objetos que incorporen propiedades y métodos de otros objetos. Así podremos construir unos objetos a partir de otros sin tener que reescribirlo todo. Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y e xtender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árb oles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple. ENCAPSULAMIENTO El encapsulamiento separa las características esenciales de las no esenciales (métodos y variables de tipo públic o private) dentro de un objeto. Es evidente que el encapsulamiento se logra gracias a la abstracción y el ocultamiento Abstracción: La abstracción consiste en expresar las características esenciales de un objeto, así como su comportamiento. Las cuales distinguen al objeto de los demás. Además de distinguir entre los objetos provee límites conceptuales. Ocultamiento: Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer sólo los detalles que sean necesarios para el resto del sistema. POLIMORFISMO proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores. ¿Cuáles son las ventajas de un lengua je orientado a objetos? Fomenta la reutilización y extensión del código. Permite crear sistemas más complejos. Relacionar el sistema al mundo real. Facilita la creación de programas visuales. Construcción de prototipos Agiliza el desarrollo de software Facilita el trabajo en equipo Facilita el mantenimiento del software Resumen ¿Por qué seguimos buscando nuevas técnicas de desarrollo? Por el aumento de la complejidad de los sistemas. En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos. La orientación a objetos es paradigma de que está de moda para el desarrollo de software. Un objeto es una abstracción conceptual del mundo real que se puede traducir a un lenguaje de programación orientado a objetos. Un objeto del mundo real tiene características y comportamientos, y de la misma manera, un objeto del mundo del software tiene variables y métodos. Una Clase es una plantilla que define las variables y métodos a ser incluidas en un tipo de objeto específico. Los objetos también son llamados instancias de la Clase. Los objetos sólo almacenan su estado. De dice que un objeto tiene estado cuando tiene valores en sus variables. Los objetos se comunican entre ellos usando los mensajes. Un mensaje es la invocación de un método del objeto. La orientación a objetos requiere de una metodología que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y técnicas adecuadas. ALGORITMOS EN J AVA 1. Cual de las siguientes sentencias esta mal definida a. char c = “cadena”; b. int a = 5; c. float b = 2.0; c. int c = 12/4; Es un mecanismo derivado del mecanismo de interacción de las instancias (mensajes). 2. Teniendo a= 10 c= 5 y realizando la siguiente operación: v= a * ++c; Que hará esta sentencia: Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto más especializado que se necesite usar. Algunos lenguajes a. v toma el valor de 50 y c toma el valor de 6 b. v toma el valor de 60 y c toma el valor de 5 c. v toma el valor de 50 y c toma el valor de 5 d. v toma el valor de 60 y c toma el valor de 6 int num = 5 ; int anio = 2000; if ( a nio < 2011 && num > 0) { num += 1 ; anio += num ; } System.out.println("NUMERO FAVORITO" + num); } 4. Cual de las Siguientes instrucciones es correcta para tomar un valor introducido en una caja de texto a. num= Double.parseDouble(t1.getText0): a. num= Double.ParseDouble(t1.gettext0): a. num= Double.parseDouble(t1.GetText0): a. num= double.parsedouble(t1.getText0): 5. De que tipo deberá ser x para que la instrucción de abajo funcione correctamente, asumiendo que t2 es un objeto de la clase TextField: x= t2.getText0; a. de clase String b. de tipo integer c. de tipo byte d. de tipo boolean. 7. Para poder usar el método public static ins abs(int a); debo: a. Haber importado la clase java.lang.Math b. Haber importado la clase java.applet c. No se debe importar ninguna clase. d. Haber importado la clase java.lang.AWT EXTRUCTURA IF-SWITCH I- En los siguientes códigos( puntos 1 a 5) realice un análisis y una Prueba de Escritorio. Finalmente AYUDESE con el cuadro para Mostrar el println de cada código. a. 1 e. 0 b. 6 f. 5 c. 12 g.9 d. 8 h. N.A 1. public class Prueba1 { public static void main (String[] args) { int deposito = 2; int acum = 6 ; while ( deposito < acum ) { deposito += 2*deposito; } System.out.println(" EL ACUMULADO ES:" + acum); } } RTA: EL ACUMULADO ES: 6 2. public class Prueba2 { public static void main (String[] args) { int acum = 5 ; int desc = 0; if ( desc < 6 && acum > 5) { desc = desc + 2; acum = acum + desc; } System.out.println("SU DESCUENTO" + desc); } } } 4. public class Prueba4 { public static void main (String[] args) { int acum = 2 ; int i = 4 ; if ( i > 25 || acum < 5) { i = i + 3; acum = acum + i; } System.out.println("ACUMULADO ES:" + acum); } } 5. Cuantas veces se entra al ciclo de la siguiente aplicación: public class Prueba5 { public static void main (String[] args) { int pbruto = 0 ; for (int i = 2 ; i < = 6; i++) { pbruto += i++; } System.out.println("PRECIOBRUTO="+ pbruto); } } 6. Cuál de las siguientes trozos de codigo calcula de manera correcta el factorial de un número: n= numero leído int factorial = 1; // A. for (int i=1; i<=n; i++) { factorial = factorial * i; } int i = 1; // C. for (int i=1; n<=i; i++) { factorial = factorial * i; } int factorial = 5; // B. for (int i=1; i=n; i++) { factorial = factorial * i; } D. Ninguno de los anteriores. 7. Que imprime el siguiente código: public class Ciudad2 { public static void main (String[] args) { int ciudad = 3 ; switch (ciudad) { case 1: System.out.println("Bogota"); break; case 2: System.out.println("Medellin"); break; case 3: System.out.println("Cali"); case 4: System.out.println("Bucaramanga"); default: System.out.println("Codigo Inexistente"); } } } 3. public class Prueba3 { public static void main (String[] args) { 8. Modificar y corregir la class Ciudad2. Para hacer un programa que tome un numero de 1 a 5 e imprima su correspondiente traducción en ingles (1=ONE, 2=Two, 3=Trhee. 4=Four, 5= FIVE).