You are on page 1of 19

Programacin Orientada a Objetos (POO)

La programacin Orientada a objetos (POO) es una forma especial de programar, ms cercana a como se expresaran las cosas en la vida real que otros tipos de programacin. Con la POO se aprende a pensar las cosas de una manera distinta, para escribir los programas en trminos de objetos, propiedades y mtodos. Cmo se piensa en objetos Pensar en trminos de objetos es muy parecido a cmo se hace en la vida real. Considerando como ejemplo a un automvil para tratar de modelarlo en un esquema de POO. El automvil es el elemento principal que tiene una serie de caractersticas, como son el color, el modelo o la marca. Adems tiene una serie de funcionalidades asociadas, como arrancar, parar o estacionarse. En un esquema POO el automvil es el objeto, las propiedades son las caractersticas como el color o el modelo y los mtodos son las funcionalidades asociadas como ponerse en marcha o parar. Estos objetos se pueden utilizar en los programas, as en un programa que gestione un taller de automviles se utilizan objetos automvil. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos tambin son objetos. Es decir, el taller de automviles ser un objeto que utilizar objetos automvil, herramienta, mecnico, recambios, etc. Clases en POO Las clases son declaraciones de objetos, tambin se definen como abstracciones de objetos. Esto quiere decir que la definicin de un objeto es la clase. Cuando se programa un objeto y definen sus caractersticas y funcionalidades en realidad lo que se hace es programar una clase. Propiedades en clases Las propiedades o atributos son las caractersticas de los objetos. Cuando se define una propiedad normalmente se especifica su nombre y su tipo. Las propiedades son algo as como variables donde se almacenan datos relacionados con los objetos.

Pgina - 1 -

Mtodos en las clases Son las funcionalidades asociadas a los objetos. Cuando se programan las clases se llaman mtodos. Los mtodos son como funciones que estn asociadas a un objeto. Objetos en POO Los objetos son ejemplares de una clase cualquiera. Cuando se crea un ejemplar debe especificarse la clase a partir de la cual se crea. Esta accin de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccin de la palabra instace que en ingls significa ejemplar). Estados en objetos Cuando se tiene un objeto, sus propiedades toman valores. Por ejemplo, en un objeto automvil la propiedad color tomar un valor en concreto (rojo o gris metalizado, etc.). El valor concreto de una propiedad de un objeto se llama estado. Mensajes en objetos Un mensaje en un objeto es la accin de efectuar una llamada a un mtodo. Por ejemplo, cuando se le dice a un objeto automvil que arranque, se le pasa el mensaje arrancar.

Pgina - 2 -

Java
Es una plataforma virtual de software desarrollada por Sun Microsystems, de tal manera que los programas creados en ella puedan ejecutarse sin cambios en diferentes tipos de arquitecturas y dispositivos computacionales ("Diferentes plataformas"). La plataforma Java consta de las siguientes partes:

El lenguaje de programacin, mismo. La mquina virtual de Java o JRE(Java RunTime Enviroment), que permite la portabilidad en ejecucin. El API (Interfaz de Programacin de Aplicaciones) Java, una biblioteca estndar para el lenguaje.

Originalmente llamado OAK por los ingenieros de Sun Microsystems, Java fue diseado para correr en computadoras incrustadas. Sin embargo, en 1995, dada la atencin que estaba produciendo la Web, Sun Microsystems la distribuy para sistemas operativos tales como Microsoft Windows. El lenguaje mismo se inspira en la sintaxis de C++, pero su funcionamiento es ms similar al de Smalltalk que a ste. Incorpora sincronizacin y manejo de tareas en el lenguaje mismo (similar a Ada) e incorpora interfaces como un mecanismo alternativo a la herencia mltiple de C++. A fines del siglo XX, Java lleg a ser el lenguaje de mayor acogida para programas de servidor. Utilizando una tecnologa llamada JSP (similar a otras tecnologas del lado del servidor como ASP de Microsoft o PHP), se hiz muy fcil escribir pginas dinmicas para sitios de Internet. Sumado a JSP la tecnologa de JavaBeans, permita adaptar al mundo web el patrn MVC (modelo-vistacontrolador) que ya se haba aplicado con xito a interfaces grficas. Java lleg a ser extremadamente popular cuando Sun Microsystems introdujo la especificacin J2EE (Java 2 Enterprise Edition). Este modelo permite, entre otras cosas, lograr una separacin entre la presentacin de los datos al usuario (JSP o Applets), el modelo de datos (EJB), y el control (Servlets). Enterprise Java Beans (EJB) es una tecnologa de objetos distribuidos que pudo lograr el sueo de muchas empresas como Microsoft e IBM de crear una plataforma de objetos distribuidos con un monitor de transacciones. Con este nuevo estndar, empresas como BEA, IBM, Sun Microsystems, Oracle y otros crearon nuevos "servidores de aplicaciones" que tuvieron gran acogida en el mercado. Adems de programas del servidor, Java permite escribir programas de interfaz grfica o textual. Tambin se pueden correr programas de manera incorporada o incrustada en los navegadores web de Internet en forma de Java applets, aunque no lleg a popularizarse como se esperaba en un principio.
Pgina - 3 -

Los programas en Java generalmente son compilados a un lenguaje intermedio llamado bytecode, que luego son interpretados por una mquina virtual (JVM). Esta ltima sirve como una plataforma de abstraccin entre la mquina y el lenguaje permitiendo que se pueda "escribir el programa una vez, y correrlo en cualquier lado". Tambin existen compiladores nativos de Java, tanto software libre como no libre. El compilador GCC de GNU compila Java a cdigo de mquina con algunas limitaciones al ao 2002. Con la evolucin de las diferentes versiones, no slo se han producido cambios en el lenguaje, sino que se han producido cambios mucho ms importantes en sus bibliotecas asociadas, que han pasado de unos pocos cientos en Java 1.0, a ms de tres mil en Java 5.0. En particular, se han aadido APIs completamente nuevas, tales como Swing y Java2D.

Mquina Virtual de Java La Mquina virtual Java (en ingls Java Virtual Machine, JVM) es un programa nativo, es decir, ejecutable en una plataforma especfica, capaz de interpretar y ejecutar instrucciones expresadas en un cdigo binario especial (el Java bytecode), el cual es generado por el compilador del lenguaje Java. El cdigo binario de Java no es un lenguaje de alto nivel, sino cdigo mquina de bajo nivel. La JVM es una de las piezas fundamentales de la plataforma Java. Bsicamente se sita en un nivel superior al Hardware del sistema sobre el que se pretende ejecutar la aplicacin, y este acta como un puente que entiende tanto el bytecode, como el sistema sobre el que se pretende ejecutar. As, cuando se escribe una aplicacin Java, se hace pensando que ser ejecutada en una mquina virtual Java en concreto, siendo sta la que en ltima instancia convierte de cdigo bytecode a cdigo nativo del dispositivo final. La gran ventaja de la mquina virtual java es aportar portabilidad al lenguaje de manera que Sun Microsystems ha creado diferentes mquinas virtuales java para diferentes arquitecturas; siendo posible que un programa .class escrito en Windows puede ser interpretado en un entorno Linux. Tan solo es necesario disponer de dicha mquina virtual para dichos entornos. De ah el famoso axioma que sigue a Java, "escrbelo una vez, ejectalo en cualquier parte". La mquina virtual de Java puede estar implementada en software, hardware, una herramienta de desarrollo o un Web browser; lee y ejecuta cdigo precompilado bytecode que es independiente de la plataforma multiplataforma. La JVM provee definiciones para un conjunto de instrucciones, un conjunto de registros, un formato para archivos de clases, la pila, un heap con recolector de basura y un
Pgina - 4 -

rea de memoria. Cualquier implementacin de la JVM que sea aprobada por SUN debe ser capaz de ejecutar cualquier clase que cumpla con la especificacin.

Tareas de la mquina virtual Carga el cdigo Verifica el cdigo Ejecuta el cdigo

El cargador de clases Carga todas las clases necesarias para la ejecucin de un programa. Mantiene las clases de ficheros del sistema local en nombres de espacio separados.

El verificador de ByteCode Se asegura que: El cdigo se adhiera a las especificaciones de la JVM. El cdigo no viole la integridad del sistema. El cdigo no cause desbordamiento de pila.
Pgina - 5 -

Los tipos de parmetros para el cdigo operacional sean correctos. No hayan conversiones de datos ilegales.

Pgina - 6 -

Palabras reservadas
abstract private do throw import byte return extends try interface char strictfp float while new goto default this implements break public else transient int catch static finally volatile native const switch package if Boolean protected double throws instanceof case short final void long class super for continue synchronized

Pgina - 7 -

Tipos de datos
Logicos Texto Enteros Flotantes boolean char byte, short, int y long doble y float

boolean El tipo de dato boolean, tiene dos valores literales true y false. Ejemplo: boolean variable=true; boolean variable= false;

char El tipo de dato char epresenta un valor Unicode. Debe tener un valor literal encerrado entre comillas simples( ).

Ejemplo: char variable = a; char variable = \t; char variable = \u03A6;

byte, short, int y long Se usan para representar valores enteros, pueden ser inicializados de 3 formas: decimal, octal y hexadecimal. Ejemplo: byte variable =2; short variable =8; int variable =253; byte variable =02; short variable =024; int variable =02734; byte variable=0x2; short variable=0x14; int variable =0x3e8;

Pgina - 8 -

float y double Su valor por default es double. Literalmente incluye cualquier valor con punto decimal o uno de los siguientes caracteres: o E o e (para indicar un valor exponencial). o F o f (para indicar un valor float). o D o d (para indicar un valor double).

Ejemplo: 3.14 Un valor con punto flotante (por default es double). 6.02E23 Un valor grande, expresado con exponente. 2.718F Un valor con punto flotante, expresado como float. 123.4E+306D Un valor float expresado redundantemente.

String, no es un tipo de dato primitivo, es una clase que se usa para almacenar ms de un carcter, su valor debe ser declarado entre comillas dobles ( ). Usa la siguiente notacin. String variable =esta es una cadena de texto;

Pgina - 9 -

Declaracin de clases

Sintaxis <modificador> class <nombre de la clase> { } Ejemplo public class Vehiculo { } Convenciones

Los nombres de las clases deben ser sustantivos, cuando son compuestos tendrn la primera letra de cada palabra que lo forma en maysculas. Intentar mantener los nombres de las clases simples y descriptivas. Usar palabras completas, evitar acrnimos y abreviaturas (a no ser que la abreviatura sea mucho ms conocida que el nombre completo, como URL o HTML).

Declaracin de atributos

Sintaxis <modificador> <tipo> <nombre>; <modificador> <tipo> <nombre> = <valor inicial>; Ejemplo public class Vehiculo { private int modelo = 0; private String color = ; private float precio = 0.0F; }
Pgina - 10 -

Convenciones

Empiezan con letra minscula. Las palabras internas que lo forman (si son compuestas) empiezan con su primera letra en maysculas. No deben empezar con los caracteres subguin "_" o signo del dlar "$", aunque ambos estn permitidos por el lenguaje. Los nombres deben ser cortos pero con significado. La eleccin del nombre debe ser un mnemnico, designado para indicar a un observador casual su funcin. Se recomienda una declaracin por lnea, ya que facilita los comentarios. No declarar atributos de tipos diferentes en la misma lnea. Inicializar sus valores donde se declaran. La nica razn para no inicializarlo donde se declara, es si el valor inicial depende de algunos clculos que deben ocurrir. Poner las declaraciones solo al principio de los bloques (un bloque es cualquier cdigo encerrado por llaves "{" y "}".) No esperar al primer uso para declararlas; puede confundir a programadores y limitar la portabilidad del cdigo dentro de su mbito de visibilidad.

Declaracin de mtodos Sintaxis <modificador> <tipo de retorno> <nombre> ([<lista de argumentos>]) { [<expresiones>] } Ejemplo public class Vehiculo { private int modelo = 0; private String color = ; private float precio = 0.0F; private void asignaModelo ( int pModelo) { modelo = pModelo; } private void recuperaModelo ( ) { return modelo;
Pgina - 11 -

} }

Convenciones Los mtodos deben ser verbos, cuando son compuestos tendrn la primera letra en minscula, y la primera letra de las siguientes palabras que lo forma en mayscula. Los mtodos se separan con una lnea en blanco.

Construccin de objetos

Sintaxis <clase> <nombre del objeto>; <clase> <nombre del objeto> = new <clase> ([<parmetros>]); Ejemplo public class Automovil { private int modelo=0; private String color=""; private float precio=0.0F; private void asignaModelo (int pModelo) { modelo = pModelo; } private int recuperaModelo ( ) { return modelo; } public static void main (String arg[]) { Automovil miAuto = new Automovil(); } }

Pgina - 12 -

Acceso a los miembros de un objeto

El acceso a los miembros de un objeto se da mediante un punto ( .), como miembros se consideran a los atributos y mtodos. Sintaxis <objeto>.<miembro> Ejemplo public class Automovil { private int modelo=0; private String color=""; private float precio=0.0F; private void asignaModelo (int pModelo) { modelo = pModelo; } private int recuperaModelo ( ) { return modelo; } public static void main (String arg[]) { Automovil miAuto = new Automovil(); miAuto.color="rojo"; miAuto.precio=102000; miAuto.modelo=1998; System.out.println("Color: " + miAuto.color + " Precio: " + miAuto.precio + " Modelo: " + miAuto.modelo); miAuto.asignaModelo(2008); System.out.println("Modelo: " + miAuto.recuperaModelo()); } }

Pgina - 13 -

Tipos de referencia en Java


Adems de los tipos primitivos, existen las referencias a objetos. Las variables pueden contener referencias a un objeto. Ejemplo: public class MyDate { private int day = 1; private int month = 1; private int year = 2000; public MyDate (int day, int month, int year) { } public void print() { } } public class TestMyDate { public static void main(String[] args) { MyDate today = new MyDate(22, 7, 1964); } }

Construccin e inicializacin de objetos


La llamada a new objeto ( ), asigna espacio para el nuevo objeto, resultando en: Asignacin de memoria: se asigna espacio para el nuevo objeto y las variables de instancia son inicializadas con sus valores por defautl (por ejemplo, 0, false, null, 1, etc). Se inicializan los atributos. Un constructor es ejecutado. La asignacin de variables es hecha para todas las referencias del objeto.

Ejemplo: MyDate my_birth = new MyDate(22, 7, 1964);

Pgina - 14 -

Paso por valor


El lenguaje de programacin java slo pasa argumentos por valor. Cuando la instancia de un objeto es pasado como un argumento a un mtodo, el valor del argumento es la referencia al objeto. El contenido del objeto puede ser cambiado en la llamada del mtodo, pero la referencia al objeto nunca cambia. public class PassTest { // Mtodo para cambiar el valor actual public static void changeInt(int value) { value = 55; } public static void changeObjectRef(MyDate ref) { ref = new MyDate(1, 1, 2000); } public static void changeObjectAttr(MyDate ref) { ref.setDay(4); } public static void main(String args[]) { MyDate date; int val; val = 11; // Try to change it changeInt(val); // What is the current value? System.out.println("Int value is: " + val); // Asignando la fecha date = new MyDate(22, 7, 1964); // Try to change it changeObjectRef(date); // Cul es el valor actual? date.print(); // Cambiando el atributo day changeObjectAttr(date); // Cul es el valor actual? date.print(); } }

Pgina - 15 -

La referencia this

Al acceder a variables de instancia de una clase, la palabra clave this hace referencia a los miembros de la propia clase en el objeto actual; es decir, this se refiere al objeto actual sobre el que est actuando un mtodo determinado y se utiliza siempre que se quiera hace referencia al objeto actual de la clase. Ejemplo: public class MiClase { int i; public MiClase() { i = 10; } // Este constructor establece el valor de i public MiClase( int valor ) { this.i = valor; // i = valor } // Este constructor tambin establece el valor de i public MiClase( int i ) { this.i = i; } public void Suma_a_i( int j ) { i = i + j; } } Aqu this.i se refiere al entero i en la clase MiClase, que corresponde al objeto actual. La utilizacin de this en el tercer constructor de la clase, permite referirse directamente al objeto en s, en lugar de permitir que el mbito actual defina la resolucin de variables, al utilizar i como parmetro formal y despus this para acceder a la variable de instancia del objeto actual. La utilizacin de this en dicho contexto puede ser confusa en ocasiones, y algunos programadores procuran no utilizar variables locales y nombres de parmetros formales que ocultan variables de instancia. La clase EjemploThis.java, utiliza la referencia this al objeto para acceder a una variable de instancia oculta para el mtodo que es llamado.
Pgina - 16 -

class EjemploThis { // Variable de instancia int miVariable; // Constructor de la clase public EjemploThis() { miVariable = 5; } // Metodo con argumentos void miMetodo(int miVariable) { System.out.println( "La variable Local miVariable contiene " + miVariable ); System.out.println( "La variable de Instancia miVariable contiene " + this.miVariable ); } public static void main( String args[] ) { EjemploThis obj = new EjemploThis(); obj.miMetodo( 10 ); } }

super
Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se puede hacer referencia al mtodo padre con la palabra clave super: import MiClase; public class MiNuevaClase extends MiClase { public void Suma_a_i( int j ) { i = i + ( j/2 ); super.Suma_a_i( j ); } } En el siguiente cdigo, el constructor establecer el valor de i a 10, despus lo cambiar a 15 y finalmente el mtodo Suma_a_i() de la clase padre MiClase lo dejar en 25: MiNuevaClase mnc; mnc = new MiNuevaClase();
Pgina - 17 -

mnc.Suma_a_i( 10 ); super es un concepto que no existe en C++, al menos no con una implementacin similar a Java. Si un mtodo sobreescribe un mtodo de su superclase, se puede utilizar la palabra clave super para eludir la versin sobreescrita de la clase e invocar a la versin original del mtodo en la supreclase. Del mismo modo, se puede utilizar super para acceder a variables miembro de la superclase. En el ejemplo java510.java, la aplicacin utiliza super para referirse a una variable local en un mtodo y a una variable de la superclase que tiene el mismo nombre. El programa tambin utiliza super para invocar al constructor de la superclase desde en constructor de la subclase. Herencia La herencia es el mecanismo por el que se crean nuevos objetos definidos en trminos de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Pato, que es una especializacin de Ave. class Pato extends Ave { int numero_de_patas; } La palabra clave extends se usa para generar una subclase (especializacin) de un objeto. Un Pato es una subclase de Ave. Cualquier cosa que contenga la definicin de Ave ser copiada a la clase Pato, adems, en Pato se pueden definir sus propios mtodos y variables de instancia. Se dice que Pato deriva o hereda de Ave. Adems, se pueden sustituir los mtodos proporcionados por la clase base. Utilizando nuestro anterior ejemplo de MiClase, aqu hay un ejemplo de una clase derivada sustituyendo a la funcin Suma_a_i(): import MiClase; public class MiNuevaClase extends MiClase { public void Suma_a_i( int j ) { i = i + ( j/2 ); } } Ahora cuando se crea una instancia de MiNuevaClase, el valor de i tambin se inicializa a 10, pero la llamada al mtodo Suma_a_i() produce un resultado diferente: MiNuevaClase mnc; mnc = new MiNuevaClase();
Pgina - 18 -

mnc.Suma_a_i( 10 ); Java se dise con la idea de que fuera un lenguaje sencillo y, por tanto, se le deneg la capacidad de la herencia mltiple, tal como es conocida por los programadores C++. En este lenguaje se aade cierta complejidad sintctica cuando se realiza herencia mltiple de varias clases, las cuales comparten una clase base comn ( hay que declarar dicha clase como virtual y tener bastante cuidado con los constructores), o tambin cuando las clases base tienen miembros de nombre similar (entonces hay que utilizar especificadores de acceso). Por ejemplo, de la clase aparato con motor y de la clase animal no se puede derivar nada, sera como obtener el objeto toro mecnico a partir de una mquina motorizada (aparato con motor) y un toro (aminal). En realidad, lo que se pretende es copiar los mtodos, es decir, pasar la funcionalidad del toro de verdad al toro mecnico, con lo cual no sera necesaria la herencia mltiple sino simplemente la comparticin de funcionalidad que se encuentra implementada en Java a travs de interfaces. Subclases Como ya se ha indicado en mltiples ocasiones en esta seccin, cuando se puede crear nuevas clases por herencia de clases ya existentes, las nuevas clases se llaman subclases, mientras que las clases de donde hereda se llaman superclases. Cualquier objeto de la subclase contiene todas las variables y todos los mtodos de la superclase y sus antecesores. Todas las clases en Java derivan de alguna clase anterior. La clase raz del rbol de la jerarqua de clases de Java es la clase Object, definida en el paquete java.lang. Cada vez que se desciende en el rbol de jerarqua, las clases van siendo ms especializadas. Cuando se desee que nadie pueda derivar de una clase, se indica que es final; y lo mismo con los mtodos, si no se desea que se puedan sobreescribir, se les antepone la palabra clave final. Lo contrario de final es abstract. Una clase marcada como abstracta, nicamente est diseada para crear subclases a partir de ella, no siendo posible instanciar ningn objeto a partir de una clase abstracta.

Pgina - 19 -

You might also like