Actualizaciones

Unidad 7 - Excepciones.EXAMEN PROXIMA SEMANA (VIERNES 21 DE MAYO 2010)
Para comprender mejor este tema es necesario leer de distintas fuentes,
te recomiendo leer en las diversas fuentes recomendadas en la sección de la bibliografia en el avance programático que te entregue al inicio del curso.

Nota: Hay varios ejemplares del Libro "Como Programar en Java " de Deitel esta disponible en la biblioteca.

- Actualizado el Sabado 15 de Mayo del 2010 -

sábado, 15 de mayo de 2010

Unidad 7 - Excepciones > Ejemplos

Manejo de Excepciones- El siguiente archivo contiene las clases del último ejemplo visto en clase.
Ejemplo: Excepciones definidas por el usuario

lunes, 19 de abril de 2010

Unidad 6 > Polimorfismo y Reutilización

POLIMORFISMO
Conceptos

Ahora continuaremos nuestro estudio de la programación orientada a objetos, explicando y demostrando el polimorfismo con el uso de las jerarquias de herencia. El polimorfismo nos permite "programar de forma general", en vez de "programar de forma especifica". En especial, nos permite escribir programas que procesen objetos que compartan la misma superclase en una jerarquia de clases, como si todos fueran objetos de la superclase; esto puede simplificar la programación.

Con el polimorfismo podemos diseñar e implementar sistemas que puedan extenderse con facilidad; pueden agregarse nuevas clases con sólo modificar un poco (o nada) las porciones generales de la aplicación, siempre y cuando las nuevas clases sean parte de la jerarquía de herencia que la aplicación procesa en forma genérica. Las únicas partes de un programa que deben alterarse para dar cabida a las nuevas clases son las que requieren un conocimiento directo de las nuevas clases que el programador agregará a la jerarquía. Por ejemplo, si extendemos la clase Animal para crear la clase Tortuga (que podría responder a un mensaje mover) caminando una pulgada), necesitamos escribir sólo la clase Tortuga y la parte de la simulación que crea una instancia de un objeto Tortuga. Las porciones de la simulación que procesan a cada Animal en forma genérica pueden permanecer iguales.

El polimorfismo, desde un punto de vista de orientación a objetos, permite que clases de diferentes tipos puedan ser referenciadas por una misma variable. En el siguiente ejemplo, una instancia de la clase Figura (MiFigura) podrá referenciar a
propiedades y métodos implementados en las clases Circulo y Rectángulo.



Pongamos como ejemplo que las clases Circulo y Rectangulo implementan
un método llamado Perimetro que calcula el perímetro de la figura geométrica:



La referencia MiFigura (de tipo Figura) podrá invocar al método Perimetro de la clase Circulo o al método Perimetro de la clase Rectangulo , dependiendo de, si en tiempo de ejecución, está referenciando a una instancia de la clase Circulo o está
referenciando a una instancia de la clase Rectangulo.
Es importante resaltar que la determinación del método Perimetro que se va a invocar (el de la clase Circulo o el de la clase Rectangulo ) no se realiza en la compilación, sino en tiempo de ejecución, lo que hace del polimorfismo un mecanismo de programación muy potente.
Para entender mejor la utilidad del polimorfismo, pongamos un ejemplo en el que su utilización es adecuada: supongamos que estamos realizando un editor gráfico en el que el usuario puede dibujar figuras geométricas bidimensionales tales como círculos, rectángulos, pentágonos, triángulos, etc. Además, dentro de las opciones de la herramienta, existe un botón que al ser pulsado nos muestra en una ventana el valor del perímetro de la figura seleccionada.
Nosotros no conocemos a priori las figuras que el usuario dibujará, eso es algo que ocurre en tiempo de ejecución, al igual que no podemos saber por adelantado de qué figura o figuras solicitará conocer el perímetro. En un momento dado, mientras un usuario utiliza el editor gráfico, existirá una estructura de datos que contendrá las figuras dibujadas:




El vector MiFigura contendrá referencias a objetos de tipo Figura (Figura[]MiFigura = new Figura[100]). Según el usuario, en tiempo de ejecución, seleccione una figura geométrica u otra se invocará a un método Perimetro u otro. Esto es posible gracias al polimorfismo.

El polimorfismo, en Java, debe implementarse respetando a las siguientes reglas:

· La invocación a un método de un subclase debe realizarse a través de
una referencia a la superclase; es decir,
es adecuado poner p = LaFigura.Perimetro(), pero no p = ElCirculo.Perimetro().

· El método llamado debe ser también un miembro de la superclase; en nuestro
ejemplo, el método Perimetro debe existir también en la clase Figura.

· La firma del método debe ser igual en la superclase que en las clases derivadas;
es decir, el nombre del método y el número y tipos de sus parámetros debe ser
igual en las clases Figura, Circulo, Rectangulo, etc.

· El tipo de retorno del método (que se utilizará de forma polimórfica)
debe ser igual en la superclase que en las subclases.

· El atributo de acceso del método no debe ser más restrictivo en las clases
derivadas que en la superclase.

.

viernes, 9 de abril de 2010

jueves, 25 de marzo de 2010

Unidad 4 - Sobrecarga > ejemplo

Ejemplo visto en clase utilizando constructores y sobrecarga
Tambien se utiliza el metodo toString en la clase Persona


Clase Persona.java
Clase TryPersona.java

lunes, 15 de marzo de 2010

Constructores

Cuando creas un objeto de una clase, un tipo especial de método llamado constructor siempre es invocado. Si no se define ningún constructor para tu clase, el compilador proveerá un constructor predeterminado en la clase, el cual no hace practicamente nada, sin embargo, el proposito principal de un constructor es proveer los medios para inicializar variables de instancia para el objeto que esta siendo creado.

Un constructor tiene cinco caracteristicas especiales que lo diferencia de otros metodos de clase:

❑ Se utilizan para poner el objeto creado en un estado inicial
❑ Un constructor siempre tiene el mismo nombre que la clase.
❑ Un constructor nunca regresa un valor, y no se debe especificar ningun tipo
de retorno ni siquiera del tipo void.
❑ Son llamados automaticamente cuando se crea un objeto de la clase
❑ Java proporciona un constructor sin parametros por default, el cual, deja
de estar disponible cuando se agrega algun otro constructor a la clase.


.

lunes, 8 de marzo de 2010

Unidad 2 - Ejemplos > Parte 2 > Clases, Metodos y Objetos

Ejemplo 1_a - Semaforo.java
Ejemplo 1_b - TrySemaforo.java

Unidad 2 > Conceptos > Clases, Metodos y Objetos

PROGRAMACION ORIENTADA A OBJETOS USANDO CLASES

Definición de clases e instancias
Las clases son los elementos que Java utiliza para soportar la programación orientada a objetos. Constituyen la estructura básica sobre la que se desarrollan las aplicaciones. Una clase permite definir propiedades y métodos relacionados entre sí.

Habitualmente, las propiedades son las variables que almacenan el estado de la clase y los métodos son los programas que se utilizan para consultar y modificar el contenido de las propiedades.

Un ejemplo de clase podría ser un semáforo de circulación, cuyo estado se guarde en una propiedad EstadoSemaforo de tipo String que pueda tomar los valores “Verde”, “Amarillo” y “Rojo”. Como métodos de acceso a la propiedad podríamos definir: PonColor(String C olor) y String DimeColor().

Sintaxis

AtributoAcceso class NombreClase {
// propiedades y métodos
}

Obviando el significado del atributo de acceso, que se explicará más tarde, un ejemplo concreto de clase en Java podría ser:

public class Semaforo {
private String EstadoSemaforo = “Rojo”;

public void PonColor (String Color) {
EstadoSemaforo = Color;
}
public String DimeColor() {
return EstadoSemaforo;
}
} // Fin de la clase Semaforo


Representación gráfica
Gráficamente, la clase Semaforo la podríamos definir de la siguiente manera:



Fig. 4.1

La propiedad EstadoSemaforo, con atributo private, no es accesible directamente desde el exterior de la clase, mientras que los métodos, con atributo public, si lo son. Desde el exterior de la clase podemos acceder a la propiedad EstadoSemaforo a través de los métodos PonColor y DimeColor.


Instancias de una clase
Cuando definimos una clase, estamos creando una plantilla y definiendo un tipo. Con el tipo definido y su plantilla de código asociada (sus propiedades y métodos) podemos crear tantas entidades (instancias) de la clase como sean necesarias; de esta manera, en nuestro ejemplo, podemos crear varios semáforos (instancias de la clase Semáforo), y hacer evolucionar el estado de estos “semáforos” de forma independiente.

Si deseamos disponer de diversos semáforos independientes entre sí, en el sentido de que cada semáforo pueda encontrarse en un estado diferente a los demás, obligatoriamente debemos crear (instanciar) cada uno de estos semáforos.

Para declarar un objeto de una clase dada, empleamos la sintaxis habitual:

Tipo Variable;

En nuestro caso, el tipo se refiere al nombre de la clase:

Semaforo MiSemaforo;

De esta manera hemos creado un apuntador (MiSemaforo) capaz de direccionar un objeto (una instancia) de la clase Semaforo:



Para crear una instancia de la clase Semaforo, empleamos la palabra reservada new, tal y como hacíamos para crear una instancia de una matriz; después invocamos a un método que se llame igual que la clase. Estos métodos se denominan constructores y se explicarán un poco más delante.

MiSemaforo = new Semaforo();

También podemos declarar e instanciar en la misma instrucción:

Semaforo MiSemaforo = new Semaforo();

En cualquier caso, el resultado es que disponemos de una variable MiSemaforo que direcciona un objeto creado (instanciado) de la clase Semaforo. Podemos crear tantas instancias como necesitemos:

Semaforo MiSemaforo = new Semaforo();
Semaforo OtroSemaforo = new Semaforo();

Es importante ser consciente de que en este momento existen dos variables diferentes implementando la propiedad EstadoSemaforo; cada una de estas variables puede contener un valor diferente, por ejemplo, cada semáforo puede presentar una luz distinta (“Verde”, “Rojo”, “Amarillo”) en un instante dado.

Utilización de los métodos y propiedades de una clase
Para designar una propiedad o un método de una clase, utilizamos la notación punto:

Objeto.Propiedad
Objeto.Metodo()

De esta forma, si deseamos poner en verde el semáforo SemaforoDeMiCalle, empleamos la instrucción:

SemaforoDeMiCalle.PonColor(“Verde”);

De igual manera podemos actuar con las demás instancias de la clase Semaforo:

MiSemaforo.PonColor(“Rojo”);
OtroSemaforo.PonColor(“Verde”);

Para consultar el estado de un semáforo:

System.out.println( OtroSemaforo.DimeColor() );
if (MiSemaforo.DimeColor().equals(“Rojo”))
String Luz = SemaforoDeMiCalle.DimeColor();

En nuestro ejemplo no podemos acceder directamente a la propiedad EstadoSemaforo, por ser privada. En caso de que fuera pública se podría poner:

String Luz = SemaforoDeMiCalle.EstadoSemaforo;
// esta linea seria valida sólo si la variable EstadoSemaforo fuera accesible
// (en nuestro ejemplo del semaforo NO lo es)

Encapsulamiento
Encapsulamiento se refiere al ocultamiento de los datos miembro de un objeto de manera que sólo se puede cambiar mediante las operaciones (métodos) definidas para ese objeto.

Cada objeto está aislado del exterior, es una entidad independiente. El aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios.

Encapsulamiento se puede refierir tanto al ocultamiento de los datos como de métodos existentes dentro de un objeto.

El Encapsulamiento de los miembros de un objeto se logra asignandoles el atributo de acceso como privado (private) dentro de la definición de la clase.

De esta forma como en el el ejemplo del semaforo la variable estado solo es accesible a través de los metodos publicos definidos por la clase (setter/getter) por lo tanto solo existe una manera de alterar el contenido de las variables privadas y esta es llamando al metodo encargado de ello.

Importancia del encapsulamiento
El encapsulamiento de los miembros de una clase es importante debido a cuestiones de seguridad e integridad de los objetos de una clase. Tu podrias tener una clase con variables que acepten solo ciertos valores permitidos, como en el caso del semaforo que solo aceptaria rojo, amarillo y verde como estados permitidos. De esta forma te aseguras de que solo valores legales serán aceptados.


Por ejemplo, en la siguiente figura podemos ver que solo los miembros publicos de una clase son los que interactuan con el exterior, protegiendo asi el acceso a los miembros privados de un objeto.



.

lunes, 1 de marzo de 2010

Unidad 2 - Practicas > Parte 1 > Metodos

Practica propuesta 1

Unidad 2 - Ejemplos > Parte 1 > Metodos

Ejemplo 4 - LeyendaStr.java
Ejemplo 3 - Promedio.java
Ejemplo 2 - SumaNumeros2.java
Ejemplo 1 - SumaNumeros.java

Unidad 2 - Métodos y mensajes

Métodos
Los métodos (procedimientos, funciones, subrutinas) nos permiten encapsular un conjunto de instrucciones de manera que puedan ser ejecutados desde diferentes puntos de la aplicación.

Por ejemplo, puede resultar útil crear un método que convierta de libras a kilos, de manera que, cada vez que se necesite realizar esta conversión se pueda invocar al método sin preocuparse de los detalles con los que está implementado.



Sintaxis

No todos los métodos devuelven valores al programa principal, sólo lo hacen si es necesario. Por ejemplo, podemos crear una serie de métodos que dibujan figuras geométricas en pantalla:

void DibujaCirculo(int XCentro, int YCentro, int Radio){
........
}
void DibujaRecta(int X1, int X2, int Y1, int Y2) {
.........
}
..........

Ninguno de los métodos anteriores necesita devolver un valor al programa que los llama. En este caso, en lugar de indicar un tipo concreto de dato antes del nombre del método (como en convertirAKilos), se pone la palabra reservada void.



Por ejemplo:



No hay que confundir argumentos con parámetros; los parámetros son variables que utiliza el método como valores de partida para sus cálculos. Su visibilidad y ámbito (existencia) se limitan a los del propio método. Los argumentos son valores que se establecen en el programa llamante y que se traspasan (por valor o referencia como veremos más adelante) al método llamado.

La instrucción return Resultado; normalmente suele ser la última del método.

Cuando el método no devuelve un valor, como ya se ha comentado, hay que poner la palabra reservada void como tipo de retorno. En el método podemos prescindir de la instrucción return o utilizarla sin un valor asociado;

es decir:
return;

.

lunes, 8 de febrero de 2010

Unidad1 - Conceptos > Arreglos

Un arreglo es un objeto que representa una colección de datos del mismo tipo (Es una estructura de datos homogenea).

Podemos imaginar un arreglo como una lista seguida de casilleros, cada casillero puede almacenar un elemento en particular, generalmente del mismo tipo (excepto lo permitido en polimorfismo).

Pueden existir arreglos que contengan datos del tipo primitivo, arreglos de objetos, incluso arreglos que contengan otros arreglos.

Declaracion:

tipo [] nombre_arreglo; // una sola dimension

Ejemplo:

int [] miArreglo; // declaracion de una referencia (variable) a un arreglo
miArreglo = new int[10]; // creacion de un arreglo de 10 elementos enteros

o bien:

// declaracion y creacion de un arreglo en una sola linea
int [] miArreglo = new int[10];


Hacer click para agrandar imagen

Arreglos Multidimensionales
También existen los llamados arreglos multidimensionales, estos pueden contener dos o mas dimensiones, en realidad un arreglo multidimensional es un arreglo que contiene otros arreglos.

Su sintaxis es la siguiente:

tipo [][] nombre_arreglo ; // declaracion de un arreglo de dos dimensiones
nombre_arreglo = new [3][4]; // creacion

el anterior es un ejemplo de un arreglo de dos dimesiones de 3x4

Si deseamos declarar un arreglo de 3 dimensiones solo tendriamos que agregar un nuevo par de corchetes, y asi sucesivamente por cada dimension extra, por ejemplo:

tipo [][][] nombre_arreglo ; // declaracion de un arreglo de tres dimensiones
nombre_arreglo = new [3][4][5]; // creacion del arreglo


En el caso del arreglo de dos dimensiones, la representación normalmente se haría mediante una tabla o matriz, como sigue:




Sin embargo una forma más precisa sobre como deberiamos de razonar acerca del funcionamiento de los arreglos mutidimensionales sería de la siguiente manera:




En la figura anterior vemos como la matriz en realidad es un arreglo que contiene otros arreglos con sus respectivos elementos.

sábado, 6 de febrero de 2010

Unidad1 - Ejemplos > Parte1 > Introducción

Ejemplo 14 - ContarCaracteres.java
Ejemplo 13 - Dados.java
Ejemplo 12 - CicloDoWhile.java
Ejemplo 11 - CicloWhile.java
Ejemplo 10 - CollectionFor.java
Ejemplo 9 - Enumeraciones.java
Ejemplo 8 - InstruccionSwitch.java
Ejemplo 7 - IF's - IfTerciario.java
Ejemplo 6 - IF's - RevisionDeLetras2.java
Ejemplo 5 - IF's - RevisionDeLetras.java
Ejemplo 4 - IF's - RevisionDeNumeros.java
Ejemplo 3 - Casting.java
Ejemplo 2 - Frutas.java
Ejemplo 1 - Variables.java

IDE Netbeans

Entorno de Desarrollo Integrado NETBEANS

El código en Java se puede escribir en cualquier editor de texto. Y para compilar el código en bytecodes, sólo hace falta descargar la versión del JDK deseada. Sin embargo, la escritura y compilación de programas así utilizada es un poco incomoda. Por ello numerosas empresas fabrican sus propios entornos de edición, algunos incluyen el compilador y otras utilizan el propio JDK de Sun.

Existen diversos entornos de desarrollo para trabajar con Java por ejemplo Eclipse, Microsoft Visual J++, Visual J#, JBuilder y NetBeans, éste ultimo sin duda uno de los más populares.

NetBeans es un entorno gratuito de código abierto para la generación de código en diversos lenguajes (especialmente pensado para Java). Contiene prácticamente todo lo que se suele pedir a un IDE, editor avanzado de código, depurador, diversos lenguajes, extensiones de todo tipo (CORBA, Servlets, etc.). Incluye además un servidor de aplicaciones Tomcat para probar aplicaciones de servidor.

En este enlace puedes descargar Netbeans con el JDK incluido : JDK 6.18 + Netbeans 6.8

o si prefieres también puedes descargar el IDE de netbeans con soporte para diversas caracteristicas : www.netbeans.org. (Solo que en este caso es necesario descargar también el JDK en : JDK de Java)

Estructura básica de una aplicación en Java

En Java la unidad fundamental del código es la clase. Son las clases las que se distribuyen en el formato bytecode de Java. Estas clases se cargan dinámicamente durante la ejecución del programa Java.

Resumamos como se estructura un programa en Java:

* Un programa en Java siempre consiste de una o más clases
* Típicamente se coloca el código de programa para cada clase en un archivo por separado, y se le debe dar a cada archivo el mismo nombre con que la clase halla sido definida dentro de él.
* Un archivo fuente de Java debe tener la extensión .java
* Tales archivos pueden estar organizados dentro de carpetas o mejor dicho en paquetes (package).



El funcionamiento básico del metodo println para dar salida a texto en pantalla se puede resumir en el siguiente esquema:

Introducción a Java

Java es un lenguaje de programación creado para satisfacer una necesidad de la época planteada por nuevos requerimientos hacia los lenguajes existentes.

En 1991, la empresa Sun Microsystems crea el lenguaje Oak (de la mano del llamado proyecto Green). Mediante este lenguaje se pretendía crear un sistema de televisión interactiva. Este lenguaje sólo se llegó a utilizar de forma interna. Su propósito era crear un lenguaje independiente de la plataforma y para uso en dispositivos electrónicos.

En 1995 pasa a llamarse Java y se da a conocer al público.

Algunas de sus ventajas son:

• Su sintaxis es similar a C y C++
• No hay apuntadores (lo que le hace más seguro y fácil de usar)
• Muy preparado para aplicaciones TCP/IP
• Implementa excepciones de forma nativa
• Permite multihilos
• Tipos de datos y control de sintaxis más rigurosa
• Totalmente orientado a objetos
• Es independiente de la plataforma

Quizá la ventaja más importante es la independencia de plataforma, y posiblemente la segunda característica más importante es que es orientado a objetos, los programas orientados a objetos son más fáciles de entender y consumen menos tiempo al momento de darles mantenimiento.


Tipos de Programas en Java
Hay dos tipos básicos de programas que se pueden escribir en Java. Programas que pueden ser empotrados en una página web (del lado del cliente(applets), del lado del servidor (servlets y JSP)), y programas autónomos llamados aplicaciones Java. Las aplicaciones Java se pueden subdividir en aplicaciones de consola, las cuales solamente soportan la salida de caracteres a la pantalla de la computadora (aplicaciones de consola, por ejemplo salida a la línea de comandos de Windows) y en aplicaciones con ventanas (aplicaciones graficas), en las cuales se pueden crear y manipular múltiples ventanas además de menús, barras de herramientas, ventanas de dialogo, botones, etc.

También es posible crear miniaplicaciones para dispositivos móviles como por ejemplo celulares, estas miniaplicaciones llamadas midlets se pueden crear mediante la version Micro Edition de java.

Proceso de compilación
Los programas Java no son ejecutables, no se compilan como los programas en C o C++. En su lugar son interpretados por una aplicación conocida como la máquina virtual de Java (JVM). Previamente el código fuente en Java se tiene que precompilar generando un código (que no es directamente ejecutable) previo conocido como bytecode o J-code.




Estructura de archivos en Java
Al llevar a cabo la instalación del kit de desarrollo de java, se crearán en el disco duro una serie de directorios los cuales contendrán diversos archivos para el correcto funcionamiento de Java, normalmente la carpeta raíz se nombra de acuerdo a la versión instalada en ese momento. Sin embargo tal directorio raíz puede ser nombrado de forma diferente, según criterio del usuario.


Metodologia de la P.O.O.

.
La POO (Programacion Orientada a Objetos) permite fabricar programas de forma más parecida al pensamiento humano, de hecho simplifica el problema dividiéndolo en objetos y permitiendo centrarse en cada objeto, para de esa forma eliminar la complejidad. Cada objeto se programa de forma autónoma y esa es la principal virtud.


Razones fundamentales que están influyendo en la importancia de la POO

● La OO es especialmente adecuada para realizar determinadas aplicaciones, sobre todo realización de prototipos

● Las aplicaciones orientadas a objetos son más sencillas de mantener

● Los mecanismos de encapsulamiento de POO soportan un alto grado de reutilización de código, incrementándose con la herencia y agregación.

● Interfaces de usuario visuales



Algunos de los beneficios de la POO

● Mejora la Productividad. La reutilización de componentes existentes acelera el proceso de desarrollo.

● Las reducciones de código van desde un 40% con respecto a la programación estructurada.

● Entrega de sistemas de alta calidad. El sistema se construye de componentes existentes debidamente validados y probados.

miércoles, 3 de febrero de 2010

Bienvenidos



Te doy la bienvenida a este blog, a través del cual podrás descargar información referente a la materia de Programación Orientada a Objetos, estaré subiendo algunos de los ejemplos vistos en clase, ademas podrás descargar las practicas referentes a cada unidad.

Puedes hacer comentarios solo si estas registrado en el blog, solo toma en cuenta que comentarios ofensivos o fuera del tema que se este tratando serán descartados.

Participa y Aprende!

"Life is not about waiting for the storms to pass...it's about learning how to dance in the rain."