Sunteți pe pagina 1din 26

Conceptos y Principios de Orientacin a Objetos

Rosala Laza Fidalgo. Departamento de Informtica. Universidad de Vigo

Introduccin al enfoque O.O


Durante los ltimos aos, la Programacin Orientada a Objetos (Object Oriented Programming, u OOP) ha tomado gran importancia. El trmino OOP indica ms una forma de diseo y una metodologa de desarrollo que un lenguaje de programacin, ya que en realidad se pueden aplicar los principios del paradigma de programacin orientada a objetos (encapsulacin, herencia y polimorfismo) en cualquier lenguaje de programacin. Tambin es razonable pensar que todo lo programado por lenguajes orientados a objetos es OOP. Esto no es cierto, ya que incluso en un lenguaje orientado a objetos puro, es posible que un mal diseo lleve a una implementacin que en realidad no siga los principios de Orientacin a Objetos mencionados.

Desarrollo de software

PORTABILIDAD. El software desarrollado debe funcionar independientemente del hardware y del entorno de funcionamiento o Sistema Operativo sobre el cual se ejecute. PRODUCTIVIDAD. Uno de los principales objetivos es simplificar el proceso de desarrollo de Software, para lo cual es fundamental reutilizar componentes. MANTENIMIENTO. Constituye una de las etapas ms costosas en el desarrollo de software que, por tanto, habr que optimizar. Es fundamental estructurar bien el programa para prever futuros cambios o modificaciones. CALIDAD. A la hora de producir software, no hay que olvidar que se deben de desarrollar productos de calidad, dada a partir de una serie de aspectos como robustez, fiabilidad, eficiencia, flexibilidad, ...

Programacin Estructurada vs Programacin Orientada a Objetos.


El paradigma de programacin estructurado, se basa en tomar un problema, y subdividirlo sucesivamente en subproblemas, hasta llegar a unos subproblemas suficientemente sencillos de resolver. Problemas del paradigma de programacin estructurada:

Creciente complejidad de las aplicaciones. Limitaciones en la modelizacin de problemas no estructurados: El software se estructura segn la solucin del problema en vez de enfocarlo directamente segn el problema en s mismo. sto puede conducir a una separacin conceptual entre el problema del mundo real y su representacin e implementacin informtica. Difcil reutilizacin del software. Mantenimiento difcil y costoso.

Programacin Estructurada vs Programacin Orientada a Objetos.


Programacin Orientada a Objetos no trata de hacer ms sencillo el problema a resolver (dividindolo), sino que trata de simular el problema a resolver. As, en todo problema existen una serie de entidades (fsicas o no) que interaccionan para resolverlo, de manera que simulando estas entidades, y su comportamiento, es posible resolver el problema en cuestin. Cada una de estas entidades es un objeto en el sistema desarrollado mediante OOP, de ah el nombre de programacin orientada a objetos. Ventajas de OOP:

Uniformidad Comprensin Flexibilidad Reusabilidad

Conceptos bsicos de Orientacin a Objetos


Clases Objetos Encapsulacin y Ocultacin de datos Herencia Abstraccin Polimorfismo y Ligadura Dinmica

Clases I

Una clase permite describir objetos similares mediante la definicin de sus estructuras de datos y mtodos comunes. Las clases son plantillas para objetos, permitiendo la agrupacin de objetos que comparten las mismas propiedades y comportamiento. Existen rectngulos de varios tamaos, pero todos ellos pertenecen a la clase rectngulo, que define los atributos comunes para todos ancho y alto, a la vez que el mtodo (o funcin miembro) calcularArea, tambin comn para todos.

Clases II
Clase en JAVA
class Empleado { private String nombre; private int edad; private int antiguedad; private float salario; public float calcularSalario(int horasTrabajadas) { return ( ( salario * horasTrabajadas ) + ( antiguedad * 60 ) ); } }

Clases III

Una superclase es una clase de ms alto nivel que agrupa otras clases con propiedades y funciones comunes, por tanto, los objetos (tambin llamados instancias de una clase determinada) de esas otras clases son tambin objetos (instancias) de la superclase. Las clases que son agrupadas por una superclase son sus subclases.

Clases. Modificadores de clase en Java.


Una declaracin de clase puede ir precedida de modificadores que otorgan a la clase ciertas propiedades:

public. Una clase public es pblicamente accesible. abstract. Una clase abstracta se considera incompleta y no se pueden crear instancias de dicha clase. Esto sucede porque la clase contiene mtodos abstract que deben ser implementados por una subclase. final. Una clase final no admite subclases.

Una clase no puede ser a la vez final y abstract.

Clases. Mtodos y Mensajes I


Los mtodos no son ms que funciones miembro de una clase. Se trata de funciones que, automticamente, tratan con los atributos del objeto como si fuesen variables locales a la funcin. Los mtodos, por tanto, son el mecanismo de acceso y manipulacin de los datos del objeto. Cada mtodo est constituido por un conjunto de instrucciones escritas en un lenguaje de programacin determinado, asociadas a un objeto determinado y cuya ejecucin slo puede desencadenarse a travs de un mensaje recibido por este o por sus descendientes. Los objetos se comunican a travs del paso de mensajes. En la prctica, esto supone la ejecucin de un mtodo en un objeto determinado. Un mensaje le dice a un objeto lo que tiene que hacer, identificando un mtodo y los operandos necesarios para su ejecucin. Los objetos reciben, interpretan y responden a mensajes procedentes de otros objetos. Un mensaje consiste en una direccin (a cul o cules objetos se enva) y una instruccin formada por un nombre de mtodo y 0 o ms parmetros: OBJETO.metodo [parmetros]

Clases. Mtodos y Mensajes II


Supongamos el conjunto de objetos de los Empleados de una empresa. Para un empleado concreto, queremos calcular su salario mensual, pero para ello se necesita conocer el nmero de horas trabajadas. Se enva un mensaje al objeto, empleado23, de activar calcularSalario() con unas horasTrabajadas determinadas: empleado23.calcularSalario( horasTrabajadas )

Ante este mensaje, el receptor (empleado23) ejecutar su mtodo calcularSalario() (siempre que el emisor tenga permiso para solicitar dicha operacin), o, en caso de no poder procesar el mensaje, se devolver un mensaje de error.

Clases. Mtodos y Mensajes III


class Empleado { private private private private String nombre; int edad; int antiguedad; float salario;

Constructor

public Empleado(String n, int e, int a, float s) { nombre = n; edad = e; antiguedad = a; salario = s; } public float calcularSalario(int horasTrabajadas) { return ( ( salario * horasTrabajadas ) + ( antiguedad * 60 ) ); } public String toString() { return ( nombre + + edad ); } }

Clases. Mtodos y Mensajes III

Empleado empl1 = new Empleado( Filemn, 32, 10, 30 ); float salarioEmpl1 = empl1.calcularSalario( 1260 ); System.out.print( empl1.toString() ); // o System.out.print( empl1 ); System.out.print( empl1 + + salarioEmpl1 ); 38400 // Filemn 32

Clases. Atributos.

Deben ser significativas dentro del entorno de la aplicacin. Es decir, deben servir para identificar claramente y de manera nica a cada uno de los objetos. class Libro { private String editorial; private String autor; private int numEdicion; private String isbn; private int numPaginas; private int anno; public Libro(String e, String a, int n, String i, int p, int an) { autor = a; editorial = e; numEdicion = n; isbn = i; numPaginas = p; anno = an; } }

El nmero de atributos debe ser el mnimo para realizar todas las operaciones que requiere la aplicacin.

Clases. Modificadores de Atributos en Java.


Los atributos de clase pueden precederse con modificadores. Pueden ser: Modificadores de acceso. Existen cuatro posibles modificadores: predeterminado. Slo son accesibles desde las clases del paquete private. Slo son accesibles en la propia clase protected. Son accesibles en las subclases de la clase y en la propia clase. public. Son accesible en cualquier parte donde la clase sea accesible.

static. Se crean variables de clase. Cuando se declara un campo static en una clase slo existe una copia de ese campo, independientemente del nmero de instancias de la clase que se creen. Un atributo static puede ser referido directamente dentro de su propia clase, pero cuando se accede a l externamente, hay que utlizar el nombre de la clase. Ejemplo: static int numero; ... Vehiculo.numero; final. Un atributo final es aquel cuyo valor no puede cambiar despus de ser inicializado. Ejemplo: private static final int NUM_COCHES=10;

Resumen Clase.
Una clase es una plantilla para objetos, permitiendo agrupar objetos que comparten las mismas propiedades y comportamientos. Los mtodos permiten el acceso y manipulacin de los datos del objeto. Al definir un mtodo se indica la accesibilidad, lo que devuelve nombre del mtodo y los parmetros entre parntesis. Ejemplo: public void saltar(), private int consultarHoras(). Los atributos describen los objetos. Al definirlos se pone modificadores de acceso [static] [final] el tipo nombre. Ejemplo: private int edad; private static int numAlumnos; private static final int NUM_MAX_ALUM = 100; Los objetos se comunican entre s a travs del paso de mensajes, en la prctica supone la ejecucin de un mtodo determinado. Obj1.metodo(); (Con o sin parmetros)

Tipos de datos en Java.


Java proporciona ocho tipos primitivos: cuatro para enteros (byte, short, int y long), dos para nmero en coma flotante (float, double), carcter (char) y booleano (boolean). El resto de tipos son tipos referencia. Una referencia es una variable que guarda la direccin de memoria en la que se almacena un objeto. Una referencia puede almacenar tambin el valor null, indicando as que no referencia a ningn objeto. Ejemplo: String nombre. La variable nombre referencia a un objeto cadena (de tipo String). String es una clase que proporciona Java.

Objetos I

Smith y Tockey sugieren que un objeto representa un elemento, unidad o entidad individual e identificable, ya sea real o abstracta, con un papel bien definido en el dominio del problema. En algunos lenguajes, como por ejemplo SmallTalk, la Orientacin a Objetos es pura, y todos los posibles elementos del propio lenguaje son objetos. En otros lenguajes, los ms habituales, algunas cosas no son objetos, sino atributos, valores o caractersticas de objetos, representado por tipos de datos como entero, flotante, etc. Algunas de ellas son simplemente atributos de los objetos como el color, el tamao y la velocidad. Los atributos reflejan el estado de un objeto.

Objetos II

Un OBJETO es la integracin de tres aspectos:


Relaciones, permiten que el objeto se integre en la organizacin de la que forma parte junto con otros objetos. Las relaciones pueden ser de tipo jerrquico (herencia) o semntico, como en el caso de los objetos que componen la antena parablica. Propiedades (atributos), distinguen un objeto de los restantes (tamao, posicin, color, ...). Cada propiedad tendr un determinado valor. Las propiedades de un objeto pueden ser heredadas por sus descendientes. Mtodos (operaciones), conjunto de operaciones que puede hacer un objeto (estudiar, caminar, trabajar, rotar, volar, etc.). Un mtodo es un procedimiento o funcin que altera el estado de un objeto o hace que el objeto enve un mensaje, es decir, que devuelva valores. Los mtodos pueden ser heredados por sus descendientes.

10

Objetos III

Todo objeto tiene un estado, exhibe algn comportamiento bien definido y tiene una identidad nica. El estado de un objeto abarca todos los atributos (normalmente estticos) del mismo, ms los valores actuales (normalmente dinmicos) de cada uno de esos atributos. El comportamiento se refiere a cmo acta y reacciona un objeto, en trminos de sus cambios de estado y paso de mensajes. Ejemplo: Una mquina expendedora de refrescos puede aceptar un tipo de monedas. Esta es una propiedad esttica (es decir, fija), lo que significa que es una caracterstica esencial de la mquina. En cambio, la cantidad actual de monedas que ha aceptado en un momento dado representa el valor dinmico de esta propiedad (atributo). El mecanismo que acepta las monedas y devuelve un refresco a cambio es un conjunto de mtodos: su comportamiento.

Ejemplo de Objetos en JAVA


public class Rectangulo { private int ancho; private int alto; public Rectangulo(int n, int l) { ancho = n; alto = l; } public int calculaArea() { return ( ancho * alto ); } } class ppal { public static void main(String[] args) { Rectangulo r1 = new Rectangulo( 5, Rectangulo r2 = new Rectangulo( 6, System.out.println( El rea de r1 es System.out.println( El rea de r2 es } }

Mtodos que modifiquen el estado del objeto?

10 ); 7 ); + r1.calculaArea() ); // 50 + r2.calculaArea() ); // 42

11

Objetos. Identidad.

Cada objeto existe y tiene entidad por s mismo. La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos, son distintos entre s. De esta forma, incluso una serie de coches recin salidos de fbrica son distintos los unos de los otros. Esto tiene importancia cuando descendemos al nivel de programacin. Aqu, cada objeto tiene un controlador por el cual se identifica. ste puede ser una variable, una estructura de datos, una cadena de caracteres, etc. El controlador ser distinto para cada uno de los objetos, aunque las referencias a stos sean uniformes e independientes del contenido, se permite crear agrupaciones de objetos con el mismo tratamiento (clases).

Ejemplo en JAVA
class A {} class Ppal { static public void main(String[] args) { A refA = new A(); // refA es una referencia. A refB = refA; // refA y refB apuntan al mismo objeto A refC = null; // No apunta a ningn objeto } }

12

Ejemplos de sintaxis en Java. Clases


/* Enunciado: Escribe un mtodo que dados tres nmeros indique cual es el mayor * (Objetivos: tipo bsico int, salida por pantalla, definicin de un mtodo) */

public class Repaso_if { public static void mayorEs(int x, int y, int z) { int mayor= x; if (y > x && y > z) mayor= y; else if (z > x && z > y) mayor = z; System.out.println("El nmero mayor de "+x+", "+y+", "+z+" es: "+ mayor); } }

Encapsulacin y Ocultacin de datos I


Un objeto es la integracin de atributos y mtodos. Los datos de la programacin tradicional son ahora atributos de un objeto y las funciones los mtodos que se utilizan para procesar los atributos de ese objeto. Esto quiere decir que todos esos datos y funciones, en lugar de estar dispersos, como en programacin estructurada, se encapsulan en una nica unidad, que en la mayora de lenguajes es la clase. A partir de esta clase, se instancian posteriormente los objetos. La organizacin interna de la clase es inaccesible desde el exterior (ocultamiento de la informacin). Las partes ocultas o encapsuladas de una clase, y por tanto de sus objetos, son su implementacin privada, o lo que es lo mismo se dice que son privados. Se dice que los mtodos visibles son pblicos y forman la interfaz del objeto (en general se asume el ocultar los atributos como una buena tcnica de programacin).

13

Encapsulacin y Ocultacin de datos II


Cada objeto mantiene sus propios datos internos y los usuarios de un objeto pueden acceder y manipular los datos internos solamente a travs de sus mtodos, de tal forma que la interfaz de un objeto es su conjunto de mtodos pblicos. As, detalles internos de la implementacin de un objeto como algoritmos o representaciones internas de datos, no son visibles. Esto refuerza el ocultamiento de la informacin y permite un alto nivel de abstraccin. De la misma forma que no tenemos acceso a las operaciones internas que realiza un medidor de combustible en un coche para indicarnos la cantidad de combustible disponible. No necesitamos saber, no tenemos por qu tener acceso, a las operaciones internas de un objeto que representa un altmetro de un avin en una aplicacin; slo es necesario conocer el mtodo del objeto del cul se obtiene esa altura, no cmo el objeto altmetro interacciona con el altmetro fsico.

Encapsulacin y Ocultacin de datos III


Esto no quiere decir que sea imposible conocer informacin de un objeto, sino que las peticiones de informacin a un objeto deben cursarse a travs de mensajes al objeto con el fin de realizar una determinada operacin. La respuesta a esa peticin ser la informacin solicitada siempre que el objeto compruebe que el solicitante tiene acceso a ella. El ocultamiento de informacin facilita que los usuarios de un objeto no estn expuestos al peligro cuando su implementacin cambia mientras no haya cambiado la interfaz. Entonces los programas que utilizaban el objeto pueden seguir funcionando sin alteracin alguna. Ejemplo: Si el objeto altmetro anterior cambia su forma de interaccionar con el altmetro real del avin (por ejemplo, porque se ha cambiado de modelo), no es necesario cambiar el resto de objetos que utilizan ese objeto altmetro.

14

Ejemplo de encapsulacin y ocultacin de datos


class Cerradura { private int combinacion; public boolean abreCerradura(int c) { if ( c == combinacion ) return true; else return false; } public Cerradura(int c) { combinacion = c;

class Ppal { public static void main(String[] args) { Cerradura candado = new Cerradura( 123 ); System.out.println( candado.abreCerradura( 456 ) ); //false System.out.println( candado.abreCerradura( 123 ) ); //true

Herencia I

La herencia designa la facultad de los objetos de compartir propiedades y operaciones entre ellos. Como la herencia humana, existen unas determinadas clases hijo que heredan las propiedades y atributos de otras clases padres. Desde un punto de vista de implementacin, se trata de crear nuevas clases de objetos a partir de otras ya existentes, es decir, de reutilizar el comportamiento de una clase en la definicin de otras nuevas. Cualquier clase hereda la declaracin de los atributos y los mtodos de su superclase, pudiendo estas subclases especializarse aadiendo una declaraciones de atributos adicionales y declaraciones de mtodos propios o incluso cambiando los atributos y mtodos heredados.

15

Herencia II

Una de las razones para emplear la herencia es que permite la reutilizacin del cdigo de proyectos anteriores, permitiendo la modificacin (o especializacin) de aquellos aspectos que no concuerden exactamente con las necesidades de nuestra aplicacin. En las jerarquas que establecen las relaciones de herencia, a medida que descendemos de nivel, cada nivel aporta un grado ms de especializacin sobre el nivel inmediatamente superior. En cambio, si partimos del nivel de clases inferiores hacia los niveles superiores, cada nivel supone una generalizacin del nivel inmediatamente inferior.

Herencia Simple

Se produce cuando la clase que recibe la herencia tiene un slo padre.


De atributos: Los atributos de una clase son heredadas automticamente por todos sus descendientes. Esto quiere decir que un objeto tiene propiedades de su clase y propiedades de las clases heredadas.

De mtodos. La herencia de los mtodos permite aumentar la reutilizacin de software y simplifica, por tanto, el diseo. Adems, facilita la programacin, reduce redundancias y simplifica la correccin de los programas. Los mtodos deben situarse tan elevados en la jerarqua de clases como sea posible, aunque puedan ser abstractos (es decir, sin incluir cdigo). De esta forma se facilita la abstraccin, al poder establecer mtodos comunes a varias clases.

Los atributos deben definirse en las clases tan cercanas a las clases terminales de la jerarqua como sea posible. En los niveles superiores de la jerarqua normalmente no existe suficiente informacin como para que puedan decidirse unos atributos u otros, mientras que las clases terminales ya representan entidades ms concretas.

16

public class Persona { private String nombre; public Persona(String n) { nombre = n; } public String getNombre() { return nombre; } } public class Estudiante extends Persona { private String titulacion;

Un programa en Java en el que la clase estudiante hereda de la clase persona. La herencia se indica en Java con la palabra clave extends. Aquellas clases que no heredan explcitamente de ninguna clase lo hacen de Object.

public class Ppal { public static void main(String[] args) { Estudiante est1; est1 = new Estudiante(Paula,Ingeniera Informatica); System.out.println(est1); // llama a toString System.out.println( est1.getNombre() ); } }

public Estudiante(String n, String t) { super( n ); // Llama al constructor de Persona titulacion = t; } public String getTitulacion() { return titulacion; } public String toString() { return getNombre() + , + titulacion; } }

Herencia Mltiple I

Se produce cuando el objeto que hereda tiene ms de un padre o alguno de sus antepasados tiene varios padres. La herencia mltiple ofrece la posibilidad de definir clases hbridas que comparten los miembros de dos o ms clases predefinidas. Es difcil de encontrar en los lenguajes OO, ya que para determinar si un objeto hereda un miembro puede que haya que seguir caminos por ms de un padre. Pueden darse conflictos debidos a que un objeto herede la misma propiedad o mtodo de dos objetos situados al mismo nivel o a distinto nivel (colisin de nombres). Este tipo de situaciones se da cuando una clase hereda 2 o ms versiones de un mtodo provenientes de los distintos ancestros, y es inevitable en el caso de la herencia repetida, que se produce cuando una clase hereda de otras que a su vez heredan de una clase comn. En cualquier caso, esta herencia suele producir los conflictos conocidos como colisin de nombres. Sucede cuando el nombre de un mtodo o atributo existe en ms de una clase de nivel superior.

17

Herencia Mltiple II

Java no permite herencia mltiple. La herencia siempre es simple, aunque permite la implementacin de mltiples interfaces. Los interfaces son clases que slo contienen mtodos abstractos. Se pueden distinguir otros dos tipos de herencia:

Herencia selectiva (o parcial) que permite decidir qu mtodos se heredan y cules no. Esto complica sintcticamente la definicin de una clase, lo que hace que sean pocos los lenguajes que la adoptan. Herencia no selectiva que fuerza a que todos los atributos y mtodos sean heredados. Esta es la ms utilizada, incluyendo lenguajes como C++, Java o C#.

class Profesor { private String nombre; public Profesor(String n) { nombre = n; } public String getNombre() { return nombre; }

class ProfesorUniversitario extends Profesor implements Investigador { private String investigacion; public ProfesorUniversitario(String n, String i) { super( n ); // Constructor de Profesor investigacion = i; } public String getCampoInvestigacion() { return investigacion; }

interface Investigador { public String getCampoInvestigacion(); }

18

Ejemplos de sintaxis en Java. Clases


/* Enunciado: Escribe un mtodo que dado un nmero N mayor que 0, calcule la siguiente suma 1+2+3+...+N * Objetivos (bucles, definicin del bucle for, se podra explicar el mismo ejercicio con un while) */

public class Repaso_Bucle {

public static int suma(int y) { int sum= 0; if (y <= 0) System.out.println("El nmero introducido es menor o igual a 0"); else for (int i = 1; i <= y; i++) sum+=i; System.out.println("Resultado de la suma es: "+sum); return sum; } }

Ejemplos de sintaxis en Java. Clases


/* Escribe los mtodos que puede tener una calculadora, adems proporciona un mtodo calcular que selecciona la operacin en funcin de un char. * Objetivos (definir varios mtodos que ellos los identifiquen, mtodos privados, swith) */
public class Calculadora { private static double suma(double x, double y) { return x + y; } private static double producto(double x, double y) { return x * y; } private static double resta(double x, double y) { return x - y; } private static double division(double x, double y) { } return x / y; } } public static double calcular(char o, double x, double y) { double result = 0; switch (o){ case '+': result= suma(x,y); break; case '-': result = resta(x,y); break; case '*': result = producto(x,y); break; case '/': result = division(x,y); break; default: System.out.println("No conozco la operacion"); } System.out.println("El resultado es: "+result); return result;

19

Organizacin y relaciones entre objetos I


Organizacin jerrquica:Las clases se organizan jerrquicamente si tenemos en cuenta la relacin de herencia.


RAZ (o SUPERCLASE): Es una clase, que suele ser nico y especial, caracterizado por estar situado en el punto ms elevado de la organizacin jerrquica. CLASES INTERMEDIAS, descienden directamente o indirectamente de la raz y a su vez tienen descendientes. En general reciben el nombre de clases si descienden directamente de la raz o subclases si descienden de una clase o otra subclase. Otra clasificacin de los objetos intermedios se basa en si sus descendientes son tambin intermedios o son terminales. A los primeros se les conoce entonces como clase abstracta y a los segundos clase de objetos terminales. CLASES TERMINALES, descienden de una clase o una subclase y no tienen descendientes. Los objetos normalmente se instanciarn de estas clases.

Organizacin y relaciones entre objetos II


Relaciones jerrquicas entre clases:


Una clase es padre de otra cuando existe una relacin jerrquica directa entre ellas, segn la cual la primera se encuentra situado inmediatamente encima de la segunda en el rbol jerrquico. Si una clase es padre de otra, la segunda es hija de la primera. Una organizacin jerrquica es simple cuando una clase slo puede tener un padre, y compleja cuando puede tener varios padres. A es antepasado de B, si A es padre de B o si A es padre de un antepasado de B. B es descendiente de A, si B es hija de A o si es hija de un descendiente de A.

20

Organizacin y relaciones entre objetos III


Relacin de asociacin entre clases:


Las relaciones de asociacin puede decirse que son de dos tipos: composicin y uso. En el primer tipo, se establece una relacin es parte de entre dos clases cuando la segunda de ellas tiene atributos que son referencias a la primera, y los objetos a los que apuntan son creados cuando un objeto de la segunda clase es creada, y destruidos cuando el mismo es destruido. En el segundo caso sucede lo mismo, a excepcin de que los objetos ya existen y son pasados normalmente en el constructor del mtodo. La eliminacin de objetos de la primera clase no supone la eliminacin de objetos de las clases relacionadas. La relacin entre clases es del tipo usa a.

Un ejemplo de sto podra ser la relacin de un alumno, las materias y sus notas. Los objetos de la clase Alumno poseen o estn compuestos por objetos de la clase Notas (que no tienen sentido sin el alumno), pero a la vez usan objetos de la clase Asignatura, que perviven independientemente de los objetos de la clase Alumno.

Organizacin y relaciones entre objetos IV


Una lnea est formada por dos puntos. Los objetos de Punto forman la Lnea, y no tiene sentido sin ella. La clase Lnea usa o conoce el Punto que supone el centro del plano. class Punto { class Linea { private double x; private Punto p1; private double y; private Punto p2; public Punto(double a, private Punto centro; double b) { public Linea(double x1, double y1, x = a; double x2, double y2, Punto c) y = b; { } p1 = new Punto( x1, y1 ); p2 = new Punto( x2, y2 ); public double getX() centro = c; { } return x; } } public double getY() { return y; }

21

Abstraccin I

Shaw define abstraccin como una descripcin simplificada o especificacin de un sistema que enfatiza algunos de los detalles o propiedades del mismo mientras suprime otros. Una buena abstraccin es aquella que enfatiza detalles significativos al lector o usuario y suprime detalles que son, al menos por el momento, irrelevantes o causa de distraccin. La abstraccin es una tcnica de programacin que permite definir nuevos tipos de datos por el usuario. La esencia de la abstraccin es similar al uso de un tipo de dato de un lenguaje de programacin, cuyo uso se realiza sin saber como est representado o implementado. Una 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. Definir una abstraccin significa describir una entidad del mundo real, no importa lo compleja que pueda ser, y a continuacin utilizar esta descripcin en un programa.

Abstraccin II

El uso de un objeto por va de su especificacin como tipo abstracto o clase abstracta significa que, si su aspecto interno experimenta modificaciones, otras partes del sistema no se vern afectadas. Un mtodo abstracto es, como vimos, un mtodo que declara una funcionalidad que debe ser implementada en todas las clases derivadas de la clase en que se vaya a utilizar. En otras palabras, a travs de un mtodo indicamos lo que deberan poder hacer los objetos de dichas subclases. No se implementa en la clase base, sino que cada subclase debe tener su propia implementacin.

22

abstract class Figura { abstract public float calculaArea(); } class Rectangulo extends Figura { private float ancho; private float alto; public float calculaArea() { return ancho * alto; } public Rectangulo(int a, int l) { ancho = a; largo = l; }

class Ppal { public static void main(String[] args) { Rectangulo r = new Rectangulo( 6, 10 ); Circulo c = new Circulo( 5 ); System.out.println( r.calculaArea() ); // 60 System.out.println( c.calculaArea() ); // 78.53 } }

class Circulo extends Figura { private float radio; public float calculaArea() { return radio * radio * Math.PI; } public Circulo(int r) { radio = r; }

Polimorfismo y Ligadura Dinmica I


El polimorfismo consiste en la posibilidad de aplicar una misma operacin sobre distintos objetos, y que esta operacin vare segn el objeto al que se le aplique. Esto sucede en tiempo de ejecucin, NO en tiempo de compilacin, por lo que el polimorfismo est ntimamente ligado al enlace dinmico, como se ver a continuacin. La operacin suele ser un mtodo. Los objetos a los que se les puede aplicar este mtodo estn limitados por herencia: ese mtodo se define en una clase y es aplicable, con los refinamientos subsiguientes, a todas sus subclases. Al proceso de seleccionar el mtodo apropiado segn la clase del objeto se llama ligadura o enlace. Si sta tiene que aplazarse obligatoriamente hasta el tiempo de ejecucin, el mensaje supone un enlace dinmico (tambin conocido como tardo). Es decir, si todos los objetos son asociados estticamente a una clase, y no se tiene en cuenta los posibles cambios de referencia, el mtodo a aplicar puede determinarse en tiempo de compilacin, sin que el sistema sufra ningn tipo de sobrecarga. Sin embargo, en la mayora de los casos, es interesante que los cambios de referencia producidos en tiempo de ejecucin influyan en el cmputo.

23

Polimorfismo y Ligadura Dinmica II


La ligadura esttica significa que se fijan los tipos de todas las variables y expresiones en tiempo de compilacin; la ligadura (o enlace) dinmica (tambin llamada ligadura tarda) se produce cuando no es posible conocer la clase del objeto hasta el tiempo de ejecucin. La ligadura dinmica es la capacidad de retrasar hasta el instante de la recepcin del mensaje la decisin sobre la clase del objeto que lo recibe y el mtodo concreto que debe de ejecutarse.

// ... clases Figura, Rectngulo y Crculo public class Ppal { public static void main(String[] args) { Figura f; int opcion = pideOpcionAlUsuario(); if ( opcion == 1 ) f = new Rectangulo(5, 10); else f = new Circulo(5); // ? (50 o 78,5) System.out.println( rea: + f.calculaArea() ); } }

Polimorfismo y Ligadura Dinmica III


Esta propiedad es una poderosa herramienta para simplificar el diseo de aplicaciones, pero hay que tratarla con precaucin. El error ms comn provocado por el uso del polimorfismo es que, en un afn de simplificar, si se utilizan siempre los mismos nombres en las operaciones, se desvirta realmente el nombre del operador. La gran ventaja del polimorfismo es permitir la realizacin de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan. Slo ser necesario definir cuidadosamente las clases abstractas. El polimorfismo facilita la reutilizacin de software, haciendo posible implementar software genrico que se pueda aplicar no slo a objetos existentes, sino tambin a objetos que sean aadidos en etapas futuras del desarrollo.

24

Conceptos errneos sobre polimorfismo


En algunos lenguajes OOP esta propiedad es confundida, errneamente, con otra conocida como operator overloading (sobrecarga de operadores), que permite la redefinicin de operadores como +, ", ... Otro concepto asociado errneamente al polimorfismo es la method overloading o sobrecarga de mtodos, es decir, varios mtodos que tienen el mismo nombre, pero el nmero de parmetros o los tipos de la lista de parmetros es distinto. Tanto la sobrecarga de mtodos como de operadores no es ms que una riqueza sintctica extra: en realidad, las llamadas a los mtodos son enlazados en tiempo de compilacin (ligadura o enlace esttico) al mtodo concreto que ofrece los argumentos en nmero y tipo igual a los de la llamada. En cualquier caso, si se desea considerar como polimorfismo, es un tipo de polimorfismo esttico, y no es lo que se entiende habitualmente por este trmino..

Ejemplo sobrecarga de mtodos


class Empleado { // ... private float sueldo; // en Euros. // ... public void putSueldo(int pts) { sueldo = pts * 166.386; } public void putSueldo(float euros) { sueldo = euros; } } class Ppal { public static void main(String[] args) { Empleado empl = new Empleado(); empl.putSueldo( 900.0 ); // El putSueldo() que acepta float. empl.putSueldo( 150000 ); // El putSueldo() que acepta int. } }

25

Ejemplos de sintaxis en Java. Clases


/* Enunciado: Calcula la raiz cuadrada de un entero, escribe el mismo mtodo pero pasndole un String * Objetivos (tipo bsico int, clase contenedora Integer, mtodos de Integer, return, clase final Math, mtodos static) */ public class RaizCuadrada { public static double calculoRaiz(double y) { double raiz = 0; if (y <= 0) System.out.println("No se puede calcular la raiz de un nmero negativo"); else raiz= Math.sqrt(y); System.out.println("La raiz de "+y+" es "+raiz); return raiz;

public static double calculoRaiz(String z) { double y = Double.parseDouble(z); double raiz = 0; if (y <= 0) System.out.println("No se puede calcular la raiz de un nmero negativo"); else raiz= Math.sqrt(y); System.out.println("La raiz de "+y+" es "+raiz); return raiz;

26

S-ar putea să vă placă și