1. Programaciòn Orientada a Objetos. Un objeto es un contenedor (repositorio) de datos y con un comportamiento que manipula a dichos datos. Un objeto es un componente reutilizable de software que se modela en tèrminos comùnes a los utilizados para describir las cosas del mundo real. Un objeto tiene propiedades o atributos, en las cuales se almacenan los datos. El comportamiento del objeto està dado por los mètodos, que son rutinas que manipulan a los datos. Una clase es un tipo de dato definido por el programador y que especifica las propiedades y mètodos de un objeto. Un objeto es un ejemplar de una clase Por cada clase, pueden existir uno o mas objetos. Un objeto tiene un tipo de dato, que es la clase. Cuando se crea un nuevo tipo de clase, se deben realizar dos etapas fundamentales: determinar los atributos y el comportamiento de los objetos. Un objeto es una instancia de una clase. Una clase tiene un nombre, una colecciòn de operaciones para manipular a sus instancias y una representaciòn. Las operaciones que manipulan las instancias de una clase (los objetos) se llaman mètodos. El estado o representaciòn de una instancia se almacena en variables de la instancia, llamadas propiedades o atributos. El envìo de mensajes a objetos (instancias) es similar a la llamada a procedimientos en lenguajes de programaciòn tradicionales. La programaciòn orientada a objetos es la tècnica de codificaciòn de software que se fundamenta en los conceptos de clase,objetos,mètodos, mensajes, herencia y polimorfismo. Un objeto se compone de datos y mètodos que operan sobre esos objetos. El enfoque orientado a objetos es reutilizar còdigo o clases ya existentes y construir nuevas clases. Este enfoque se conoce como bottom-up. Difiere al de la programaciòn estructurada que obligaba a concebir todo el sistema desde la funciòn principal y que se fuera diviendo en funciones màs especificas (top-down); pero que no concebia la reutilizaciòn como parte de su enfoque y obligaba al programador a tener todo planeado al momento de codificar. 2. Elementos bàsicos de Java. Java se originò en Sun Microsystems como un proyecto para los dispositivos electrodomèsticos inteligentes. Java se utiliza actualmente para crear aplicaciones, sistemas cliente/servidor, aplicaciones Web, y para aplicaciones de dispositivos mòviles. Java actualmente està dividido en tres plataformas: - Java 2 Standard Edition (J2SE) que ofreece los elementos bàsicos del lenguaje (manipulaciòn de clases, estructuras de datos, archivos, componentes de interfase gràfica de usuario, comunicaciones TCP/IP y Web, multihilado, XML, multimedia, JavaBeans, còdigo movil como applets) - Java 2 Enterprise Edition (J2EE) que offrece componentes para programaciòn de sistemas cliente/servidor tales como componentes Web (Servlets,JSP), componentes transaccionales (Enterprise Java Beans), componentes de conectividad (Java Database Connectivity, Java Naming Directory Interface, JavaMail, Java Connector Architecture). - Java 2 Micro Edition (J2ME) que ofrece componentes para programaciòn de dispositivos mòviles, con la implantaciòn de Midlets Los programas en Java consisten en varias piezas que se llaman clases. Estas clases consisten de piezas llamadas mètodos, los cuales realizan tareas y devuelven informaciòn cuando completan esas tareas. La mayorìa de los programadores de Java utilizan las colecciones de clases existentes en las bibliotecas de clases Java. Los nombres de archivos de còdigo fuente en Java terminan con la extensiòn .java. El nombre del archivo es idèntico al nombre de la clase. El compilador de Java (javac) traduce un programa Java a còdigo de bytes (bytecodes): el lenguaje que el intèrprete de Java puede entender. Si un programa se compila correctamente, el compilador produce un archivo con la extensiòn .class. Este es el archivo que contiente los còdigos de bytes que interpretàn durante la fase de ejecuciòn. Un programa Java debe colocarese en memoria antes de que pueda ejecutarse. De esto se encarga el cargador de clases, que toma el archivo (o archivos) .class que contiene los còdigos de bytes y los transfiere de la memoria principal. El archivo .class puede cargarse desde un disco en el sistema operativo o a travès de una red. Una aplicaciòn es un programa que generalmente se guarda y se ejecuta en el equipo local del usuario. Las aplicaciones se cargan en memoria y despues se ejecutan mediante el intèrprete java. Un applet es un programa que generalmente se guarda en un equipo remoto, al cual se conectan los usuarios mediante un navegador Web. Una aplicaciòn en Java es un programa independiente qe se ejecuta utilizando el interprete java, que es la implantaciòn de la màquina virtual de Java (Java Virtual Machine o JVM) Los programadores insertan comentarios para documentar los programas y mejorar su legibilidad. Un comentario que empieza con // es un comentario de una linea. Un comentario que empieza con /* y termina con */ es un comentario tradicional y puede abarcar varias lineas. Una cadena de caracteres contenido entre comillas dobles se conoce como String. En el còdigo Java, las lìneas en blanco, los caracteres de espacio, nueva lìnea y tabuladores son caracteres de espacio en blanco, que, cuando se encuentran fuera de las cadenas de caracteres, son ignorados por el compilador. Las palabras clave estàn reservadas para uso en Java y deben aparecer completamente en minùsculas. Nunca utilizar esas palabras para nombres de clases, variables o mètodos. Las palabras reservadas son: abstract else int static boolean extends inteface super break false long switch byte final native synchronized case finally new this catch float null throw char for package throws class goto private transient continue if protected true default implements public try do import return void double instanceof short volatile while La palabra class introduce la declaraciòn de una clase y va seguida por el nombre de la clase que, por convenciòn debe comenzar con mayùscula. Si el nombre de una clase contiene màs de una palabra, la primera letra de cada palabra debe estar en mayùscula. Un identificador es una serie de caracteres que consisten en letras, digitos, guiones bajos (_) y signos de moneda ($) que no empieza cn un digio, no contiene espacios y no es una palabra reservada. Java es sensible a mayùsculas y minùsculas, es decir, distingue la diferencia entre letras mayùsculas y minùsculas. Una llave izquierda {, y una derecha }, delimita el cuerpo de la declaraciòn de una clase. La sintàxis es class NombreClase { //cuerpo de la clase } Los mètodos puede realizar tareas y devolver informaciòn cuando las han complementado. Las aplicaciones en Java comienzan su ejecuciòn en el mètodo main. La primera lìnea del mètodo main debe ser: public static void main (String [] args) Una llave izquierda {, y una derecha, }, delimitan el cuerpo de la declaraciòn de un mètodo. System.out es el objeto de salida estàndar o pantalla. System.out prermite a las aplicacions en Java mostrar cadenas en la ventana de comandos en la que se ejecuta la aplicaciòn. Los mètodos print y println del objeto System.out imprimen la informaciòn en la ventana de comandos. Cuando el mètodo print termina de mostrar su argumento, no coloca el cursor de salida al principio de la siguiente lìnea en la ventana de comandos. El siguiente caracter mostrado en la ventana de comandos aparece inmediatamente despuès del ultimo caracter mostrado con print. Cuando println completa su tarea, coloca el cursor de salida al principio de la siguiente lìnea en la ventana de comandos. Cada instrucciòn Java debe terminar con un punto y coma (el terminador de la instrucciòn) Java contiene muchas clases predefinidas que se agrupan en paquetes (categorìas de clases relacionadas). En conjunto, estos paquetes forman la biblioteca de clases de Java, conocida como la Interfaz de Programaciòn de Aplicaciones (Application Programming Interface o API) de Java. Una variable es una ubicaciòn en la memoria de la computadora, en donde puede guardarese un valor para que un programador lo utilice. Todas las variables tienen un nombre, tipo, tamaño y valor. El nombre de una variable puede ser cualquier identificador vàlido. Todas las variables deben declararse con un nombre y un tipo para que puedan utilizarse en un programa. Las declaraciones terminan con un punto y coma (;) y pueden dividirse en varias lineas,separando cada variable en la declaraciòn con una coma (formando una lista, separada por comas, de nombres de variables) Las variables tienen los siguientes tipos Tipo Tamaño Valores que puede tomar Uso habitual boolean. 1 bit true o false banderas, condiciones para estructuras de control byte 8 bits De -128 a 127 Bucles for, indices, manipulaciòn de flujos de archivos char 16 bits De '\u0000' a '\uFFFF' Para representar un caracter en formato Unicode short 16 bits De -32768 a 32767 Conteo, aritmetica de enteros int 32 bits -2147483648 a 2147483647 Aritmetica de enteros en general long 64 bits -923372036854775808 a Calculos con enteros en general 923372036854775807 float 32 bits IEEE 754 Precision de 7 digitos double 64 bits IEEE 754 Precision de 15 digitos Los anteriores tipos son conocidos como escalares o nativos. Todos los que no estan en la lista, son no escalares o de tipo objeto o referencia. Un ejemplo de un tipo no nativo es String. Toda variable se declara como tipodedato nombre; donde tipodedato es escalar o referencia el nombre sigue las reglas de un identificador Toda variable que se declara en un metodo, antes de ser usada, debe ser inicializada. 3. Operadores y expresiones Java soporta operadores unitarios, binarios y de otros tipos. Una expresiòn es un elemento de un programa que toma un valor o realiza una operaciòn. La sintaxis para usar expresiones: variable = expresion donde la variable es un identificador vàlido Java y declarado como variable expresion es un constante, otra variable a la que se ha asignado previamente un valor o una formaula que se ha evaluado y cuyo resultado es del mismo tipo que el de la variable Los operadores de asignaciòn en Java son Simbolo Uso Equivalencia no abreviada Descripciòn = a = b Asignar el valor de la variable b a la variable a += a+= b a=a+b Suma b con a y lo asigna a la variable a -= a-= b a=a-b Resta b de a y lo asiigna a la variable a *= a*= b a=a*b Producto de b con a y lo asigna a la variable a /= a/= b a=a/b Divide a entre b y lo asigna a la variable a %= a%= b a=a%b Mòdulo o residuo de la division de a entre b y lo asigna a la variable a Los operadores aritmèticos son Operador Tipo Entero Tipo Real + Suma Suma - Resta Resta * Producto Producto / Division entera Division con punto flotante cociente % Division entera No aplica residuo Los operadores aritmèticos unarios son + y -. El ùltimo convierte a valor negativo cualquier variable de tipo numèrico entera o real. Los operadores de incremento y decremento son: Operador Significado a-- --a a=a-1; a++ ++a a=a+1; b=a++ b=a; a=a+1; b=++a a=a+1; b=a; b=a-- b=a; a=a-1; b=--a a=a-1; b=a; Los operadores relacionales son utilizados para producir valores de tipo boolean, y comparan dos variables entre si. Operador Significado == Igual a != No igual a > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que Los operadores lògicos permite combinar varias expresiones de tipo boolean Operador Significado Ejemplo ! No lògico !(x>=y) ^ XOr logico x9 || Or logico m==5 || n>10 && And logico mj Tabla de verdad a b a||b a&&b a^b false false false false false false true true false true true false true false true true true true true false En Java se pueden realizar asignaciones de tipo boolean boolean isMayor = (a>10) || (b>c); boolean isIgual = x==y; Los operadores de cadena de caracteres permiten concantentar una o mas variables de tipo String con tipos nativos El operador es + y tiene la siguiente sintaxis variable-string= variable-string + variable_string_o_nativa; El operador ternario, ? tiene la siguiente sintaxis: variable = expresion-boolean ?expresion-cierto: expresion-falso y es equivalente a : if (expresion-boolean) variable=expresion-cierto else variable=expresion-falso 4. Instrucciones de Control. Existen tres tipos de estructuras de control: secuencia, selecciòn y repeticiòn. La estructura de secuencia està integrada en Java, de manera predeterminada, las instrucciones se ejecutan en el orden en el que aparecen. Una estructura de selecciòn elige entre varios cursos alternativos de acciòn La instrucciòn if ejectua una secciòn indica solamente cuando la condiciòn es verdadera La sintaxis es if (condicion) instrucciones-bloque-if Las instrucciòn if ... else especifica acciones separadas a ejecutar cuando la condiòn es verdadera y cuando es falsa. if (condicion) instrucciones-bloque-if else instrucciones-bloque-else Cuando debe ejecutarse màs de una instrucciòn, las instrucciones deben ir encerradas entre llaves, formando un bloque. Una instrucciòn vacia, la cual implica que no va a realizarse ninguna acciòn, se indica mediante un punto y coma (;) Para probar varias condiciones, se puede usar if de la siguiente manera if (condicion1) instruccion-bloque-if else if (condicion2) instruccion-bloque-if else if (condicion3) instruccion-bloque-if else instrucciones-bloque-else La instrucciòn switch case permite evaluar mùltiples condiciones sobre variables de tipo char, byte, short o int La sintaxis es switch (variable-condicion) case constante1: instruccion-bloque-case break; case constante2:case constante3: instruccion-bloque-case break; case constante4: instruccion-bloque-case break; default: instruccion-bloque-default break; Una estructura de repeticiòn especifica que una acciòn va a repetirse mientras cierta condiciòn sea verdadera. El formato para la instrucciòn while es while ( condiciòn ) instrucciones-bloque-while El formato para la instrucciòn do-while es do instrucciones-bloque-do while (condicion-do); El formato para la instrucciòn for es: for (instruccion-inicio;condicion-for;cambio-variable-control-for) instruccion-bloque-for 5. Clases y objetos En Java, la unidad de còdigo es una clase. Una clase se declara con sus atributos y mètodos. La clase es la plantilla utilizada para construir objetos. La estructura de una clase es class NombreClase { //atributos, propiedades o variables de la clase tipoAtributo atributo1; tipoAtributo atributo2; tipoAtributo atributo3=valorInicial; //constantes de la clase public final static tipoConstante CONSTANTE1=VALOR1; public final static tipoConstante CONSTANTE2=VALOR2; public final static tipoConstante CONSTANTE3=VALOR3; // tipoRetorno metodo1(tipoParametro param1,tipoParametro param2) { //cuerpo del metodo que consiste en //declaraciones de variables del metodo //estructuras de control condicional, ciclos //instrucciones Java, expresiones //invocacion a otros metodos de la clase //creacion de objetos //invocacion de metodos o manipulacion de atributos de un objeto return variable_de_TipoRetorno; } tipoRetorno metodo2(tipoParametro param1,tipoParametro param2) { //cuerpo del metodo } } Donde tipoAtributo puede ser cualquier tipo escalar o de tipo objeto (clase) tipoConstante puede ser cualquier tipo escalar o de tipo objeto tipoRetoron puede ser void, tipo escalar o de tipo objeto En una clase se pueden declarar tantos atributos, constantes o mètodos se requieran. Los atributos de la clase pueden ser declarados e inicializados. NOTA: No incluir còdigo Java de instrucciones de control, expresiones o invocaciones a metodos u objetos en el cuerpo de la clase. Solo se puede incluir en los metodos de la clase. Una vez codificado una clase, se puede crear o instanciar un objeto del tipo de la clase. Un objeto es manipulado por una variable de tipo referencia. La referencia tiene un tipo de dato, que es el nombre de la clase del objeto. Para crear un objeto TipoObjeto variableReferencia = new TipoObjeto(); La variableReferencia recibe un valor que es igual a la localizaciòn del objeto creado en el modelo de memoria de la JVM. Ese valor no tiene una interpretaciòn y es un identificador que permite a un programador al momento de depurar, el diferenciar los valores tomados por las referencias Una variableReferencia puede tomar un valor null, indicando que esta referenciando a un objeto no existente. Otro valor posible que puede tomar es resultado de aplicar la operacion new Tambien puede tomar el valor de una referencia del mismo tipo de clase, implicando que una o mas referencias pueden manipular al mismo objeto. Las operaciones que pueden realizarse sobre una referencia son: + Declaracio de una referencia TipoObjeto variableReferencia; + Asignaciòn de un valor null variableReferencia=null; + Creacion de un objeto variableReferencia = new TipoObjeto(); + Asignaciòn o modificaciòn de una propiedad del objeto tipoAtributo variable = variableReferencia.atributo1; variableReferencia.atributo2= valortipoAtributo; //puede ser tambien una expresion Java + Invocacion de un mètodo que retorna un resultado tipoRetorno variable = variableReferencia.metodo1(param1, param2); + Invocacion de un mètodo que no retorna resultados ni recibe paràmetros variableReferencia.metodo3(); + Cuando una referencia es utilizada para invocar metodos o manipular atributos, se dice que se està enviando un mensaje al objeto. + Asignaciòn de una referencia a otra referencia del mismo tipo TipoObjeto variableReferencia2 = variableReferencia + Comparacion de dos referencias (la referencia1 "ve" al mismo objeto que la referencia2?) boolean bandera = ( variableReferencia2 == variableReferencia1) + Comparacion de dos referencias (la referencia1 "ve" a un diferente objeto que la referencia2?) boolean bandera = ( variableReferencia2 != variableReferencia1) Las propiedades de un objeto pueden ser de tipo referencia. Para iniciar el valor de una propiedad referencia, se puede aplicar el operador new en la misma sentencia de declaraciòn. Si las propiedades no son inicializadas, el valor que toma es el mìnimo del tipo de dato (para los nativos numericos es el valor 0, para el tipo boolean false, para char es caracter nulo y para referencias el valor null El operador ".", al ser utilizado en una referencia permite manipular propiedades o metodos. EL UTILIZAR AL OPERADOR "." CON UNA REFERENCIA CON VALOR null, PROVOCA QUE LA JVM GENERE UN ERROR O EXCEPCION CONOCIDA COMO java.lang.NullPointerException Al conjunto de valores que tienen las propiedades de un objeto, se llama estado del objeto. En cualquier còdigo Java,pueden existir uno o mas objetos. Para usar una constante de una clase NO ES NECESARIO crear un objeto, basta con usar el nombre de la clase, al operador "." y al nombre de la constante. tipoConstante v= Clase.CONSTANTE1; A la operaciòn de creaciòn de un objeto se le conoce como instanciar 6. Arreglos. Un arreglo en Java es un objeto que contiene una secuencia de variables del mismo tipo Cuando el tipo de dato de un arreglo es de tipo de dato clase, se conoce como un arreglo de objetos. Todo arreglo en Java se trata como una referencia. Por lo tanto puede tomar dos valores, null o el valor asignado en el espacio de memoria de la JVM. Las operaciones que se pueden realizar sobre un arreglo son: + Declaraciòn de un arreglo. tipoArreglo [] referenciaArreglo; + Creaciòn de un arreglo referenciaArreglo = new tipoArreglo[capacidadArreglo]; NOTA: Cuando un arreglo es creado, solo se pide espacio para cada celda del arreglo. Si el tipo del arreglo es escalar, se inicializa con el valor minimo posible; si es de tipo de una clase, el valor es null. No se debe usar un arreglo de objetos sin inicializar. + Preguntar la longitud de un arreglo int capacidad= referenciaArreglo.length; + Inicializar un arreglo de objetos, llenando celda por celda for (int i=0;i