UNIDAD II Elementos de la programación orientada a objetos LSC. Natalia Rodríguez Castellón
Estudio de un lenguaje de alto nivel Java es un lenguaje de programación de alto nivel, se comenzó a desarrollar con el objetivo de crear un lenguaje independiente de la plataforma y del sistema operativo. Al contrario de los compiladores tradicionales, que convierten el código fuente en instrucciones a nivel de maquina, el compilador Java traduce el código fuente Java en instrucciones quje son interpretadas por la Maquina virtual Java (JVM, Java Virtual Machine) Aunque hoy en día Java es por excelencia el lenguaje de programación para internet y la WWW en particular, Java no comenzó como proyecto Internet y por esta circunstancia es idóneo para tareas de programación de propósito general y de hecho muchas de las herramientas Java están escritas en Java.
Características del lenguaje Sencillo : Java es simple porque consta solo de 3 tipos de datos primitivos: números, boleanos y arreglos. Todo en Java es una clase, por ejemplo las cadenas son objetos verdaderos y no arreglos de caracteres. Java elimina los punteros, Java utiliza asignación y recolección automática de basura(garbage collection), aunque C++ requiere al programador la asignación de memoria y recolección de basura. Otra característica es la que la elegante sintaxis de Java hace mas fácil la escritura de programas. Orientado a Objetos : La POO modela el mundo real, cualquier cosa del mundo puede ser modelada como un objeto. Por ejemplo una circunferencia puede ser un objeto, un automóvil, una ventana, un libro e incluso un préstamo son objetos. Java se denomina OO debido a que su programación se centra en la creación, manipulación y construcción de objetos.
Características del lenguaje Distribuido: Java ha sido diseñado para facilitar la construcción de aplicaciones distribuidas mediante una colección de clases para uso en aplicaciones en red. La escritura en red es similar a enviar y recibir datos a y desde un archivo. La utilización de una URL(uniform Resorce, Locator) de Java puede hacer que una aplicación acceda fácilmente a un servidor remoto. Interpretado: Java es interpretado y se necesita un interprete para ejecutar programas Java. Los programas se compilan en una maquina virtual java generándose un código intermedio denominado bytecode. El bytecode es independiente de la maquina y se puede ejecutar en cualquier maquina que tenga un interprete Java.
Características del lenguaje Robusto: Significa fiable, ningún lenguaje puede asegurar fiabilidad completa. Java se ha escrito pensando en la verificación de posibles errores y por ello un lenguaje fuertemente tipificado(con tipos).no soporta por ej. Punteros y tiene una característica de manejo de excepciones en tiempo de ejecución para proporcionar robustez en la programación. Seguro: La seguridad se basa en la premisa de que nada debe ser trusted. Naturalmente la seguridad absoluta no existe. Arquitectura Neutral : Se define como independiente de la plataforma. Se puede escribir un programa que se ejecute en cualquier plataforma con una maquina virtual. Portable : Esto es, que los programas Java pueden ejecutarse en cualquier plataforma sin necesidad de ser recompilados; es decir son portables.
Características del lenguaje Alto rendimiento: Los nuevos compiladores conocidos como JIT(Just in Time) permiten que programas Java independientes de la plataforma se ejecuten con casi el mismo rendimiento en tiempo de ejecución que los lenguajes convencionales compilados. Dinámico: Como es interpretado es muy dinámico. En tiempo de ejecución el entorno Java puede extenderse mediante enlace en clases que pueden estar localizadas en servidores remotos o en una red.
Especificaciones del lenguaje Java La especificación es una definición técnica del lenguaje que incluye sintaxis, estructura y la interfaz de programación de aplicaciones (API) que contiene clases predefinidas. Las versiones de Java de Sun se incluyen en JDK(Java Development Kit), que es un conjunto de herramientas que incluyen un compilador, un interprete, el entorno de ejecución Java, el lenguaje estándar Java y otras utilidades. JDK consta de un conjunto de programas independientes cada uno de los cuales se invoca desde una línea de ordenes. El JDK viene con un conjunto de herramientas tal como el compilador de java(javac), y una maquina virtual(java) para ejecutar la aplicación entre otras. La creación de un programa en Java necesita la instalación de las herramientas de desarrollo java. Una vez instalado el Jdk en la computadora es necesario modificar la variable de entorno path, a la cual debemos agregarle la ruta donde se encuentra tanto el compilador como el interprete y este debe ser el directorio bin del JDK.
Etapas para crear un programa Escribir el código fuente. Cada programa debe contener al menos una clase.(usar un editor, puede ser notepad) //Esta aplicación visualiza Hola Mundo, Bienvenido a Java public class Bienvenido { public static void main (String[] args) { System.out.println( Hola Mundo, Bienvenido a Java );
Etapas para crear un programa Guardar el programa con el nombre de Bienvenido.java (Igual como se llama la clase) Utilizar el compilador para traducir el programa fuente en bytecode.
Etapas para crear un programa Abrir una ventana del interprete de comandos y teclear javac Bienvenido.java
Etapas para crear un programa Si el programa tiene errores de escritura el compilador lo mostrara, Java es sensible a minúsculas y mayúsculas por ejemplo main debe ser escrito en minúsculas, los nombres de las clases comienzan con letra mayúscula y los nombres de métodos y variables con minúsculas) Si no existen errores de sintaxis, el compilador genera un archivo denominado Bienvenido.class, este es el archivo bytecode
Etapas para crear un programa
y se ejecuta dela siguiente forma: Java Bienvenido
Componentes de una aplicación Comentarios // para comentarios que constan de una sola línea /*para comentarios de mas de una línea Por ejemplo este comentario */ Palabras reservadas Son palabras clave (keywords) que tienen un determinado significado para el compilador y no pueden ser utilizadas para otros fines. Ej, if, while, public, static, main, prívate, class, etc.
Componentes de una aplicación Sentencias Una sentencia representa una acción o una secuencia de acciones. Cada sentencia termina con un ;. Ej. X=5; z=z+100; println( Hola, Crayola ); Bloques Se indican por medio de llaves { bloque de sentencias Clases La clase es la construcción fundamental de java. Un programa consta de una o mas clases.
Componentes de una aplicación Métodos Un método es una colección de sentencias que realizan una serie de operaciones determinadas. Ej. System.out.println( Hola ); Es un método que visualiza un mensaje en el monitor o consola. Método main() Cada aplicación java debe tener un método main() declarado por el programador que define donde comienza el flujo del programa, el cual siempre tendrá una sintaxis como esta: public static void main(string[] args) { Sentencias;
Estructura de un programa en Java Una aplicación en Java se forma de las siguientes partes: Una sentencia de paquete (package )la cual puede ser omitida (directorio = nombre paquete) Una, ninguna o varias sentencias de importación (import) Declaración de clases privadas Una declaración de clase publica
Referencia a miembros de una clase ( métodos y variables de instancia) Es necesario declarar un objeto de la clase adecuada y a continuación escribir: nombreobjeto.nombrecomponente
Tipos de datos en Java Todos los tipos de datos simples o básicos de Java son esencialmente números. Los tipos de datos básicos son: Enteros, números de coma flotante (reales), caracteres, lógicos (bolean). Tipo Ejemplo Tamaño en bytes Rango Mínimo-Máximo char c 2 \0000.. \FFFF byte -15 1-128. 127 short 1024 2-32768 32767 int 42325 4-2147483648.. 2147483647 long 262144 8-9223372036854775808..9223372036854775807 float 10.5f 4 3.4*(10-38 ).. 3.4*(10 38 ) double 0.00045 8 1.7*10-308..1.7*10 308 boolean true 1 bit false trae
Declaración de Variables Una declaración de una variable es una sentencia que proporciona información de la variedad al compilador Java. Su sintaxis es: tipo variable Ejemplo: long dnumero; Double Notamedia; Short Diasemana; Es preciso declarar las variables antes de utilizarlas. Se puede declarar una variable en tres lugares: En una clase como miembro de la clase Al principio de un método o bloque de código En el punto de utilización
Declaración de Constantes Las constantes que representan números reales, coma flotante, Java las considera por defecto de tipo double; para que una constante sea considerada de tipo float se añade el sufijo F o f. También se puede expresar que una constante es de tipo double con el sufijo D o d. Es importante tener en cuenta el tipo por defecto, ya que puede dar lugar a errores; así: float t = 2.5; se comete un error al inicializar la variable t, ésta es de tipo float y la constante de tipo double. La solución es sencilla: float t=2.5f;
Constantes declaradas final El cualificador final permite dar nombres simbólicos a constantes a modo de otros lenguajes, como C++, Pascal final tipo nombre=valor; Especifica que el valor de una variable no se puede modificar durante el programa, se puede decir que el valor asociado es el valor final y por tanto no puede ser cambiado. Cualquier intento de modificar el valor de la variable definida con final producirá un mensaje de error.
Caracteres secuencias de escape Código de escape \n \r \t \b \f Significado Nueva línea Retorno de carro Tabulación Retroceso de espacio Avance de pagina \\ Barra inclinada inversa \ Comilla simple \ Doble Comilla \000 Número ooctal \uhhhh Número hexadecimal
Operadores de asignación de Java Símbolo Uso Descripción = a=b Asigna el valor de b a a. *= a*=b Multiplica a por b y asigna el resultado a la variable a. /= a/=b Divide a entre b y asigna el resultado a la variable a %= a%=b Fija a al resto de a/b += a+=b Suma b y a y lo asigna a la variable a -= a-=b Resta b y a y lo asigna a la variable a
Operadores aritméticos + suma - resta * multiplicación / división entera :cociente % división entera :resto
Operadores relacionales y lógicos Operadores Relacionales == igual a!= no igual a > mayor que < menor que >= mayor o igual <= menor o igual Operadores lógicos Y lógica && O lógica
Ejemplo de un programa que calcula la suma, el producto y el cociente de dos números enteros. public class Ejemplo { public static void main(string[] args) { int a=6,b=3,s,c,p; s=a+b; //9 System.out.println("La suma de los numeros es "+s); System.out.println("La suma de los numeros es "+(a+b)); p=a*b; //18 System.out.println("El producto de los numeros es "+p); System.out.println("El producto de los numeros es "+(a*b)); c=a/b; //2 System.out.println("El cociente de la division es "+c); System.out.println("El cociente de la division es "+(a/b));
La clase String Declaración: String palabra= Mensaje a guardar ; En Java para representar una cadena de caracteres se utiliza una estructura de datos denominada String, por ejemplo en el método main indicamos que recibe como parámetro un arreglo de tipo String llamado args Esto quiere decir que cuando se ejecuta la aplicación se envían los parámetros, estos son recibidos en el arreglo args
Lectura de datos desde la línea de comando //Lee dos números enteros de la línea de comando y realiza // una suma public class Suma { public static void main(string[] args) { String num1,num2; int n1,n2,s; num1=args[0]; num2=args[1]; //es necesario convertir las cadenas a tipo int para realizar la //suma n1=integer.parseint(num1); n2=integer.parseint(num2); s=n1+n2; System.out.println("La suma de "+n1 +"+" +n2+" es igual a "+s); Nota : Al ejecutar el programa se le deberán enviar los dos valores de la siguiente forma: java Suma 4 5
Conversión entre tipos de datos La extraña mezcla que existe entre los tipos primitivos del lenguaje (int, char, etc..) con tipos derivados de Object (String, ). A veces esto nos puede confundir en operaciones tan sencillas como la de convertir un String en un valor numérico. Cada tipo primitivo (básico) tiene un wrapper(envoltorio) asociado que permite tratarlos como objetos, esta es la lista de equivalencias: byte - Byte short - Short int - Integer long - Long char - Character float - Float double - Double boolean - Boolean
Cada una de estas wrapper classes o clases envoltorio (excepto Character) tiene un método que permite convertir desde String al tipo primitivo. Simplemente hay que llamar al método de la wrapper class adecuada y el String se convierte al tipo básico. Por ejemplo: convierte el contenido de la variable mystring a una variable int myint. La conversión es fácil. La conversión de cada tipo implica el empleo de un método único para cada clase wrapper. Todas las conversiones salvo las de Boolean se hacen con un método de nombre similar, pero todos los métodos tienen nombres distintos: byte - Byte.parseByte(aString) short - Short.parseShort(aString) int - Integer.parseInt(aString) long - Long.parseLong(aString) float - Float.parseFloat(aString) double - Double.parseDouble(aString) boolean - Boolean.getBoolean(aString)
Ejemplo String mystring = "12345"; int myint = Integer.parseInt(myString); Hay una excepción, la clase Character no tiene este método, para convertir un String en char hay que llamar al método charat de la clase String Ejemplo : String hello = "Hello"; char e = hello.charat(1);
Ejemplo de Conversiones public class conversiones_string { public static void main (String str[]) { String mystring ="127"; try{ Prn("Conversion a bytes: " + Byte.parseByte(myString)); Prn("Conversion a short: " + Short.parseShort(myString) ); Prn("Conversion a entero: " + Integer.parseInt(myString) ); Prn("Conversion a long: " + Long.parseLong(myString) ); Prn("Conversion a float: " + Float.parseFloat(myString) ); Prn("Conversion a double: " + Double.parseDouble(myString) ); Prn("Conversion a boolean: " + Boolean.getBoolean(myString) ); Prn("Conversion a caracter: " + mystring.charat(0) ); catch(numberformatexception e ) { System.out.println( e.tostring() ); static void Prn(String cadena) { System.out.println(cadena);
Estructuras de control Controlan el comportamiento de un método o de un programa. Las estructuras de control permiten combinar instrucciones o sentencias individuales en una simple unidad lógica con un punto de entrada y un punto de salida. Las instrucciones o sentencias se organizan en 3 tipos de estructuras de control que sirven para controlar el flujo de la ejecución: secuencia, selección (decisión) y repetición. Una sentencia compuesta es un conjunto de sentencias encerradas entre llaves { que se utiliza para especificar un flujo secuencial.
Sentencias de selección if (condición) sentencia; Se utiliza para evaluar una expresion tiene su clausula opcional else switch Se utiliza para seleccionar una de entre múltiples alternativas. El valor de la variable de la opción puede ser int o char. Sintaxis: switch(opcion) { case etiqueta1: sentencias; break; default: sentencias //opcional
Estructuras de repetición Bucles: while, for, do-while while while(condicion) { Sentencia 1; Sentencia 2; Ejemplo : Visualizar n asteriscos contador=0; while(contador<n) { System.out.print( * ); contador++;
Estructuras de repetición Ciclo for for(inicio;condicióniteración;incremento) { Sentencias; Ejemplo : Imprimir hola 10 veces for(int i=0; i<10;i++) System.out.println( hola );
Estructuras de repetición Ciclo do-while do { Sentencias; while(condición);
Arreglos Declaración: int [ ] v; int v[ ] v=new int[20]; es para indicar el número de elementos. System.out.print(v.length); imprime el número de elementos de v.
Ejemplo de vectores /*imprime los números almacenados en el vector de la última posición a la primera */ public class Vector { public static void main(string[] args) { int arreglo []= {15,34,5,87,98; for(int x=arreglo.length-1; x>=0;x--) { System.out.println(arreglo[x]);
Ejemplo de arreglos de cadenas //imprimir un arreglo de cadenas public class Vector_cadenas { public static void main(string[] args) { String[] cadenas = new String[4]; cadenas[0]= Ismael"; cadenas[1]="fernanda"; cadenas[2]= Cristina"; cadenas[3]= Jocelyn"; for(int x=0; x<4; x++) System.out.println(cadenas[x]);
Arreglos Multidimensionales Arreglos de dos dimensiones(bidimensionales, matrices) Sintaxis: Tipo de dato [][] nombre array; Tipo de dato nombre array [][]; Ejemplos: int a[][]=new int[3][5];//matriz 3 filas 5 columnas int puestos[][]; double [][] matriz; char pantalla[][]; pantalla = new char[80][24];//matriz con 80 filas y 24 columnas puestos=new int [10][5]; //matriz de 10 filas por 5 columnas int N=5; matriz=new double[n][n]; // matriz de 5 por 5
//Ejemplo donde se asignan valores a una matriz y se //imprimen public class Matriz { public static void main(string[] args) { int tabla[][]={{51,52,53,{54,55,56,{57,58,59;//3 filas y 3 columnas for(int x=0;x<3;x++) { for(int y=0;y<3;y++) System.out.print(tabla[x][y]+" "); System.out.println("\n");
Ejemplo utilizando 2 clases public class Temperatura { public int grados; public double acentigrados() { double c = (double) 5/9 * (grados-32); return c; public double afarenheit() { double f = 9/5.0 * grados + 32; return f;
public class MTemperatura { public static void main(string[ ] args){ Temperatura t = new Temperatura(); t.grados = Integer.parseInt(args[0]); char opcion = args[1].charat(0); // c o f segun sean los grados capturados if(opcion == 'f') { double c= t.acentigrados(); System.out.println(t.grados+" F = " + c + " C"); if(opcion == 'c') { double f= t.afarenheit(); System.out.println(t.grados+" C = " +f + " F");
Ejecutando
Ejemplo con matrices y 2 clases public class Matriz{ int matrix[][]; public void inicializa(){ int c=1; matrix=new int[3][3]; for(int x=0;x<3;x++) ; { for(int y=0;y<3;y++) { matrix[x][y]=c; c++; public void muestra(){ for(int x=0;x<3;x++) { for(int y=0;y<3;y++) System.out.print(matrix[x][y]+" "); System.out.println("\n");
public class MiMatriz{ public static void main(string[] args) { Matriz m=new Matriz(); m.inicializa(); m.muestra();