Sie sind auf Seite 1von 13

DE EL SALVADOR

FACULTAD MULTIDISCIPLINARIA DE OCCIDENTE (UES FMOCC)

MATERIA: PROGRAMACIN I

LABORATORIO 7:

PROGRAMACIN ORIENTADA A OBJETOS

OBJETIVOS GENERAL: Introducir los conceptos bsicos de la programacin orientada a objetos.

ESPECFICOS: Definir los conceptos bsicos relacionados a la programacin orientada a objetos. Mostrar el uso de las clases en java. Ejemplificar cada uno de los conceptos relacionados a la creacin de clases y objetos en java. Definir cada uno de los modificadores de acceso dentro de una clase. Hacer uso de constructores y sobrecarga de constructores. Mostar ejemplos de instancias de clases. Ilustrar el uso de la herencia en POO.

PROGRAMACIN ORIENTADA A OBJETOS (POO)

CLASES La clase es la base de la programacin orientada a objetos. Una clase es una construccin que se utiliza como modelo o plantilla para crear objetos de ese tipo. El modelo define las propiedades y comportamiento que tendrn los objetos creados a partir de una clase. Un objeto creado a partir de una clase se le denomina instancia de clase. Algunos conceptos importantes en la programacin orientada a objetos son: ABSTRACCIN: En el sentido ms general, una abstraccin es una representacin concisa de una idea o de un objeto complicado. En un sentido ms especfico, la abstraccin localiza y oculta los detalles de un modelo o diseo para generar y manipular objetos. Gracias a la abstraccin podemos representar las caractersticas esenciales de un objeto sin preocuparnos de las restantes caractersticas (no esenciales). La abstraccin se centra en la vista externa de un objeto, de modo que sirva para separar el comportamiento esencial de un objeto de su implementacin. Por ejemplo, si pensamos en una persona como un objeto con caractersticas como cabeza, brazos, pies, etc., y comportamientos como: hablar, caminar, dormir, etc. Hemos abstrado sus caractersticas y comportamientos ms esenciales y todas las personas comparten dichas caractersticas. ENCAPSULAMIENTO: Es una tcnica que permite localizar y ocultar los detalles de un objeto. La encapsulacin previene que un objeto sea manipulado por operaciones distintas de las definidas. La encapsulacin es como una caja negra que esconde los datos y solamente permite acceder a ellos de forma controlada. Por ejemplo si pensamos en una computadora porttil, esta tiene un gran nmero de caractersticas y comportamientos que nosotros podemos ver y utilizar, pero no todo est a la vista pensemos en el encapsulamiento como la forma en que la computadora ha sido ensamblada, sus componentes ms esenciales han sido encapsulados y solo podemos ver la parte que utilizamos incluso si la desarmamos aun no podramos interpretar fcilmente como todo funciona. HERENCIA: Es el proceso en el cual un objeto puede adquirir las propiedades de otro objeto. En este modelo una clase sera la clase padre y la que hereda sus propiedades sera una clase hija.

POLIMORFISMO: La palabra polimorfismo proviene del griego y significa que posee varias formas diferentes. Este es uno de los conceptos esenciales de una

programacin orientada a objetos. As como la herencia est relacionada con las clases y su jerarqua, el polimorfismo se relaciona con los mtodos. En general, hay tres tipos de polimorfismo: Polimorfismo de sobrecarga: El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre existen, con funcionalidad similar, en clases que son completamente independientes una de otra Polimorfismo paramtrico (tambin llamado polimorfismo de plantillas): El polimorfismo paramtrico es la capacidad para definir varias funciones utilizando el mismo nombre, pero usando parmetros diferentes (nombre y/o tipo). El polimorfismo paramtrico selecciona automticamente el mtodo correcto a aplicar en funcin del tipo de datos pasados en el parmetro. Polimorfismo de inclusin (tambin llamado redefinicin o subtipado): La habilidad para redefinir un mtodo en clases que se hereda de una clase base se llama especializacin. Por lo tanto, se puede llamar un mtodo de objeto sin tener que conocer su tipo intrnseco: esto es polimorfismo de subtipado. Permite no tomar en cuenta detalles de las clases especializadas de una familia de objetos, enmascarndolos con una interfaz comn (siendo esta la clase bsica). Ejemplo: Para ver en accin cada uno de los conceptos mencionados, vamos a crear un par de clases que identificaran a un empleado con sus atributos como salario, profesin, cargo, sin olvidar que este empleado es una persona y por lo tanto tiene nombre, apellido, edad, entre otros. Primero creamos un nuevo proyecto en NetBeans de tipo java -> Java Application y le asignamos un nombre, podemos notar que NetBeans ya nos crea una clase con un solo mtodo, el mtodo main, por lo que ya hemos venido trabajando con clases sin darnos cuenta.

Ahora para crear una clase vamos al men file > New File elegimos la categora java, luego el tipo Java Class, damos siguiente y ponemos el nombre persona, y damos finalizar.

Lo anterior nos crea un nuevo archivo con el cdigo siguiente: public class persona{ }

Vamos ahora a declarar un par de atributos para la clase persona: public class persona{ private String nombre; private String apellido; private int edad; private String genero; }

Hemos creado ya una clase persona con algunos atributos, notar que en la definicin de cada uno de los atributos (variables) hemos usado el modificador private, esto quiere decir que estos atributos sern visibles nicamente dentro de esa clase. Existen 4 tipos de modificadores los cuales se resumen a continuacin: 1. Default o package-private: Si no especificamos ningn modificador de acceso se utiliza el nivel de acceso por defecto, que consiste en que el elemento puede ser accedido slo desde las clases que pertenezcan al mismo paquete. 2. Public: permite acceder a un atributo o propiedad desde cualquier clase, independientemente que sea del mismo paquete o no. 3. Private: es el modificador ms restrictivo y especifica que los elementos que lo utilizan slo pueden ser accedidos desde la clase en la que se encuentran. 4. Protected: indica que los elementos slo pueden ser accedidos desde su mismo paquete (como el acceso por defecto) y desde cualquier clase que extienda la clase en que se encuentra, independientemente de si esta se encuentra en el mismo paquete o no.

Vamos ahora a crear un par de mtodos para la clase persona: public class persona{ private String nombre; private String apellido; private int edad; private String genero; public persona(){ this.edad = 0; } public persona(String nombre, String apellido, int edad, String genero){

this.nombre = nombre; this.apellido = apellido; this.edad = edad; this.genero = genero; } } Se han creado dos mtodos con el mismo nombre de la clase, uno de ellos no recibe ningn parmetro mientras que el segundo si recibe 4 parmetros. Lo que hemos creado en el cdigo anterior se le llama constructores.

CONSTRUCTOR: En Java es un mtodo especial dentro de una clase, que se llama automticamente cada vez que se crea un objeto de esa clase. Posee el mismo nombre de la clase a la cual pertenece y no puede regresar ningn valor (ni siquiera se puede especificar la palabra reservada void). Por ejemplo si aadiramos a la clase SSuma un constructor, tendramos que llamarlo tambin SSuma. Cuando en una clase no se escribe propiamente un constructor, java asume uno por defecto. Constructor por defecto: Un constructor por defecto es un constructor sin parmetros que no hace nada. Sin embargo ser invocado cada vez que se construya un objeto sin especificar ningn argumento, en cuyo caso el objeto ser iniciado con los valores predeterminados por el sistema (los atributos numricos a ceros, los alfanumricos a nulos, y las referencias a objetos a null).

Es preciso notar tambin que hemos creado dos constructores, uno de ellos no recibe parmetros mientras que el otro si, a esto se le llama Sobrecarga de constructores.

SOBRECARGA DE MTODOS Y DE CONSTRUCTORES La firma de un mtodo es la combinacin del tipo de dato que regresa, su nombre y su lista de argumentos. La sobrecarga de mtodos es la creacin de varios mtodos con el mismo nombre pero con diferentes firmas y definiciones. Java utiliza el nmero y tipo de argumentos para seleccionar cul definicin de mtodo ejecutar. Java diferencia los mtodos sobrecargados con base en el nmero y tipo de argumentos que tiene el mtodo y no por el tipo que devuelve. Tambin existe la sobrecarga de constructores: Cuando en una clase existen constructores mltiples, se dice que hay sobrecarga de constructores (nuestro caso).

El nuestro ejemplo hemos usado ya la encapsulacin al definir las propiedades de la clase persona como privadas, pero para que estas variables tengan sentido, se debe poder

asignar y devolver los valores de estas variables, para eso crearemos lo que se le conoce como getters and setters. Los getter and setter es una tcnica que consiste en crear un mtodo para asignar un valor y otro para devolver el valor de una variable para evitar que se acceda directamente a dicha variable.

Dentro del cdigo anterior agregaremos las siguientes lneas:

public void setNombre(String nombre){ this.nombre = nombre; } public void setApellido(String apellido){ this.apellido = apellido; } public void setEdad(int edad){ this.edad = edad; } public void setGenero(String genero){ this.genero = genero; }

Ya hemos creado el setter, estos mtodos no devuelven nada, solo sirven para asignar un valor a los atributos de la clase, ahora para devolver los valores necesitamos un mtodo para este fin, continuando con el cdigo agreguemos lo siguiente:

public String getNombre(){ return this.nombre; } public String getApellido(){ return this.apellido; } public int getEdad(){ return this.edad; } public String getGenero(){ return this.genero; }

Notase que ahora el en la definicin del mtodo antes de asignar el nombre se especifica el tipo de datos que retornara: public String getGenero() . Dentro del mtodo se usa la palabra reservada return que devuelve un valor el cual debe corresponder al tipo de dato especificado en la definicin del mtodo. Ya tenemos una clase persona con sus respectivos atributos y mtodos, ahora para usarla tenemos que instanciar dicha clase, para eso

Vamos ahora a la clase principal que nos cre NetBeans dentro del mtodo main vamos a crear una instancia de la clase que hemos creado:

Notemos que usamos el nombre de la clase para definir el tipo de la variable (instancia) que creamos, en este caso hemos creado dos objetos usando la palabra reservada new persona objeto1 = new persona(); Notemos adems que hemos creado un segundo objeto pasndole parmetros a la instancia, esto se puede debido a que hemos declarado dos constructores uno que no recibe nada y otro que si recibe parmetros. persona objeto2 = new persona("Syd", "Barret", 30, "Masculino"); Ahora hace falta ver cmo funcionan cada uno de los mtodos que hemos creado:

Para acceder a cada uno de los mtodos y propiedades de un objeto creado a partir de una clase, se utiliza la notacin de puntos as para el ejemplo tenemos el nombre del objeto punto el nombre del mtodo o propiedad: objeto1.setNombre(Nombre); Todas las propiedades y mtodos que sean pblicos podrn accederse por medio del punto, es importante adems notar que no podemos acceder directamente a las variables de la clase persona, esto se debe a que son privadas y no pueden ser accedidas fuera de esta.

Al ejecutar el cdigo de la imagen se debe imprimir los datos correspondientes a cada uno de los objetos de tipo persona creados previamente.

Para hacer ms interesante la prctica vamos a crear una nueva clase con nombre empleado la que heredara los las caractersticas de la clase persona, agregaremos adems los metodos getter y setter para cada una de las propiedades de esta nueva clase: public class empleado extends persona{ private String profesion; private String cargo; private double salario; public empleado(){ this.salario = 0; } public String getProfesion() { return profesion; }

public void setProfesion(String profesion) { this.profesion = profesion; }

public String getCargo() { return cargo; }

public void setCargo(String cargo) { this.cargo = cargo; }

public void setSalario(double salario) { this.salario = salario; } public double getSalario() { return salario; } } Notemos ahora en la definicin de la clase se us la palabra reservada extends, con la cual estamos diciendo que la clase empleado extiende a la clase persona. Esto quiere decir que estamos heredando las caractersticas de la clase persona lo cual nos permite utilizar todos sus mtodos y atributos que no sean privados.

Ahora para hacer uso de esta nueva clase vamos a la clase principal en el mtodo main y crearemos una instancia de dicha clase: public static void main(String[] args) { // TODO code application logic here empleado nuevoEmpleado = new empleado(); } Si hacemos uso de la notacin de puntos podremos notar como NetBeans nos muestra cada uno de los mtodos que creamos incluyendo los mtodos de la clase persona (clase padre) de la cual heredamos.

public static void main(String[] args) { // TODO code application logic here empleado nuevoEmpleado = new empleado(); //metodos heredados nuevoEmpleado.setNombre("Syd"); nuevoEmpleado.setApellido("Barret"); nuevoEmpleado.setEdad(30); nuevoEmpleado.setGenero("Masculino");

//metodos propios nuevoEmpleado.setProfesion("Ing. En Sistemas"); nuevoEmpleado.setCargo("Administrador de sistemas"); nuevoEmpleado.setSalario(4500); System.out.println("Nombre:"+nuevoEmpleado.getNombre()+" "+nuevoEmpleado.getApellido()); System.out.println("Edad: " + nuevoEmpleado.getEdad()); System.out.println("Genero: " + nuevoEmpleado.getGenero()); System.out.println("Profesin: " + nuevoEmpleado.getProfesion()); System.out.println("Cargo: " + nuevoEmpleado.getCargo()); System.out.println("Salario: $" + nuevoEmpleado.getSalario()); }

Con el cdigo anterior podemos verificar el funcionamiento de una clase y adems observar cmo se comporta la herencia en la programacin orientada a objetos. Esto es a groso modo la programacin orientada a objetos, ahora es cuestin de prctica e imaginacin crear programas ms complejos y abstractos que puedan solventar una o varias necesidades.