Sie sind auf Seite 1von 28

Universidad de Holgun Oscar Lucero Moya Facultad de Informtica y Matemtica Carrera: Ingeniera Informtica

Titulo: Programacin Orientado Objeto. Genericidad y Polimorfismo.

Autor: Lisandro Hernndez Almenares

Profesora: Mara del Carmen Rodrguez Hernndez

Ao: 1ro Grupo: CPT Informtica Curso: 2008-2009

INDICE

Introduccin.... Desarrollo Caractersticas de la Programacin Orientado a Objetos. Abstraccin. Encapsulamiento.. Principio de ocultacin.. Polimorfismo. Herencia.. Ventajas de la tecnologa orientada a objetos Desventajas de la tecnologa orientada a objetos. Implementacin de clases. El lenguaje JAVA. El encapsulamiento en JAVA. Herencia en JAVA.. Polimorfismo en Java. El lenguaje de programacin C++.. Encapsulamiento en C++.. Herencia en C++... Polimorfismo en C++ El lenguaje de programacin C#... Encapsulamiento en C#.. Herencia en C#.. Polimorfismo en C#... Genericidad en la POO.. Clases genricas en JAVA.. Clases genricas en C#.
3

3 4 4 4 4 4 5 5 5 6 7 8 8 9 1 1 1 3 1 3 1 4 1 6 1 7 1 7 1 8 1 9 2 1 2 2 2 2

La Programacin Orientada a Objetos (POO u OOP segn sus siglas en ingls) es un paradigma de programacin que usa objetos y sus interacciones para disear aplicaciones y programas de computadora. Est basado en varias tcnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se populariz a principios de la dcada de 1990. Actualmente son muchos los lenguajes de programacin que soportan la orientacin a objetos. La programacin orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y mdulos ms fciles de escribir, mantener y reutilizar. El concepto de POO est estrechamente relacionado con el de programacin genrica; es un tipo de programacin que est mucho ms centrada en los algoritmos que en los datos. La idea de esta forma de programar pretende generalizar las funciones utilizadas para que puedan usarse en ms de una ocasin. En el presente trabajo se abordarn de manera general estos conceptos en tres lenguajes de programacin diferentes (JAVA, C++, C#), que surgieron precisamente a partir de este paradigma de programacin. En la medida en que se desarrollen los epgrafes, debido a que algunos de los referidos lenguajes poseen caractersticas similares, no se reflejarn las particularidades de implementacin y se abarcarn de manera general. En algunos casos se ejemplificar algn concepto con porciones de cdigo, no obstante en el presente trabajo se profundizar ms en el lenguaje JAVA, por ser el objetivo principal de la asignatura.

Caractersticas de la Programacin Orientado a Objetos.


Hay un cierto desacuerdo sobre exactamente qu caractersticas de un mtodo de programacin o lenguaje le definen como "orientado a objetos", pero hay un consenso general en que las caractersticas siguientes son las ms importantes (para ms informacin, seguir los enlaces respectivos):

Abstraccin: Denota las caractersticas esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas. Los procesos, las funciones o los mtodos pueden tambin ser abstrados y cuando lo estn, una variedad de tcnicas son requeridas para ampliar una abstraccin. Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstraccin. Esto permite aumentar la cohesin de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultacin, principalmente porque se suelen emplear conjuntamente. Principio de ocultacin: Cada objeto est aislado del exterior, es un mdulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cmo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificacin por quien no tenga derecho a acceder a ellas, solamente los propios mtodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera
6

controlada y limitando el grado de abstraccin. La aplicacin entera se reduce a un agregado o rompecabezas de objetos.

Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizar el comportamiento correspondiente al objeto que se est usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocacin de un comportamiento en una referencia producir el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecucin", esta ltima caracterstica se llama asignacin tarda o asignacin dinmica. Algunos lenguajes proporcionan medios ms estticos (en "tiempo de compilacin") de polimorfismo, tales como las plantillas y la sobrecarga de operadores. Herencia: las clases no estn aisladas, sino que se relacionan entre s, formando una jerarqua de clasificacin. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en rboles o enrejados que reflejan un comportamiento comn. Cuando un objeto hereda de ms de una clase se dice que hay herencia mltiple.

Ventajas de la tecnologa orientada a objetos.


Si se parte del hecho que mediante la definicin de clases se establecen mdulos independientes, a partir de los cuales se pueden definir nuevas clases, entonces se puede pensar en estos mdulos como bloques con los cuales se pueden construir diferentes programas, ponindose as de manifiesto la flexibilidad de esta tcnica de programacin. Una vez definida la entidad para utilizarla en una aplicacin de negocios, por mencionar un ejemplo, y se desea construir a continuacin una aplicacin, digamos de cultura, en
7

donde se requiere definir a la misma entidad, no es deseable volver a escribir la definicin para la entidad. Por medio de la reusabilidad se puede utilizar una clase definida previamente en las aplicaciones y que sea de conveniencia. Es claro que la flexibilidad con la que se defini la clase va a ser fundamental para su reutilizacin. Las clases que conforman una aplicacin, vistas como mdulos independientes entre s, son fciles de mantener sin afectar a los dems componentes de la aplicacin, siendo as la mantenibilidad otra de las caractersticas de estos lenguajes de programacin. Gracias a la modularidad y a la herencia una aplicacin diseada bajo el paradigma de la POO puede ser fcilmente extensible para cubrir necesidades de crecimiento de la aplicacin.

Desventajas de la tecnologa orientada a objetos.


A pesar de que las ventajas de la programacin orientada a objetos superan a las limitaciones de la misma, se pueden encontrar algunas caractersticas no deseables en esta: No obstante que la tecnologa orientada a objetos no es nueva, un gran porcentaje de programadores no estn familiarizados con los conceptos de dicha tecnologa. En otras palabras, la lgica de la programacin estructurada sigue siendo predominante en la mayora de los desarrolladores de software, despus de haber revisado de forma breve los principios de la programacin orientada a objetos, nos es claro que en sta se requiere una lgica de pensamiento totalmente diferente a la lgica comnmente utilizada para la programacin estructurada y puede traer algunas limitaciones para el programador. La gran mayora de los equipos de cmputo cuentan con capacidades tanto de almacenamiento como de memoria lo suficientemente buena como para ejecutar la mayora de las aplicaciones que puedan desarrollarse con la tecnologa orientada a objetos, sin embargo existen casos en los que lo anterior no se cumple. Una de las desventajas de la programacin orientada a objetos es que cuando se heredan clases a
8

partir de clases existentes se heredan de forma implcita todos los miembros de dicha clase aun cuando no todos se necesiten, lo que produce aplicaciones muy grandes que no siempre encajan en los sistemas con los que se disponga. Pueden existir problemas con la velocidad de ejecucin, y esto tiene que ver, en cierto modo, con el punto anterior, una aplicacin innecesariamente pesada en muchas ocasiones es ms lenta de ejecutar que una aplicacin conformada nicamente por los mdulos necesarios.

Implementacin de clases.
Una clase es una agrupacin de datos (variables o campos) y de funciones (mtodos) que operan sobre esos datos. A estos datos y funciones pertenecientes a una clase se les denomina variables y mtodos o funciones miembro. La programacin orientada a objetos se basa en la programacin de clases. Un programa se construye a partir de un conjunto de clases. Una vez definida e implementada una clase, es posible declarar elementos de esta clase de modo similar a como se declaran las variables del lenguaje (int, double, String, ). Los elementos declarados de una clase se denominan objetos de la clase. De una nica clase se pueden declarar o crear numerosos objetos. La clase es lo genrico: es el patrn o modelo para crear objetos. Cada objeto tiene sus propias copias de las variables miembro, con sus propios valores, en general distintos de los dems objetos de la clase. Las clases pueden tener variables static, que son propias de la clase y no de cada objeto.

El lenguaje JAVA.
El encapsulamiento en JAVA.
9

DeclaracinDeLaClase { CuerpoDeLaClase} Por ejemplo, aqu se declara una nueva clase llamada Hombre con tres atributos. Como puede apreciarse, se ha instanciado como un objeto a la abstraccin que refiere las caractersticas de un hombre. public class Hombre { private String Nombre; private String Raza; private int Edad; } Esto puede hacerse para cualquier objeto del mundo real, en esencia no es ms que encapsular la idea que se tiene de este y todas sus caractersticas y comportamientos. Igual que el ejemplo anterior, podemos abstraernos con el objeto bicicleta e implementarlo en este lenguaje de programacin. public class Bicicleta{ private String marca; private String color; private String modelo; public Bicicleta(){.} publlic void frenar(){.} publlic void cambiar velocidad(){.}}

Herencia en JAVA Se puede construir una clase a partir de otra mediante el mecanismo de la herencia. Para indicar que una clase deriva de otra se utiliza la palabra extends, como por ejemplo:
10

Aqu declaran las clases mamferos, gato y perro, haciendo que gato y perro sean unos mamferos (derivados de esta clase), y se ve como a travs de ellos se nombra al animal pero as tambin se accede a patas dndole el valor por defecto para esa especie.

public class Mamifero { private int patas; private String nombre; public void imprimirPatas() { System.out.println(nombre + " tiene " + patas + " patas\n"); } public Mamifero(String nombre, int patas) { this.nombre = nombre; this.patas = patas; } } public class Perro extends Mamifero { public Perro(String nombre){ super(nombre, 4); } } public class Gato extends Mamifero{ public Gato(String nombre){ super(nombre, 4); } } public class CreaPerro { public static void main(String [] args) { Perro bobi = new Perro("Bobi"); bobi.imprimirPatas(); /*Est en la clase mamfero*/ } }
11

Cuando una clase deriva de otra, hereda todas sus variables y mtodos. Estas funciones y variables miembro pueden ser redefinidas (overridden) en la clase derivada, que puede tambin definir o aadir nuevas variables y mtodos. En cierta forma es como si la sub-clase (la clase derivada) contuviera un objeto de la superclase; en realidad lo ampla con nuevas variables y mtodos. Todas las clases de Java creadas por el programador tienen una super-clase. Cuando no se indica explcitamente una super-clase con la palabra extends, la clase deriva de java.lang.Object, que es la clase raz de toda la jerarqua de clases de Java. Como consecuencia, todas las clases tienen algunos mtodos que han heredado de Object. La composicin (el que una clase contenga un objeto de otra clase como variable miembro) se diferencia de la herencia en que incorpora los datos del objeto miembro, pero no sus mtodos o interface (si dicha variable miembro se hace private). En Java, a diferencia de otros lenguajes orientados a objetos, una clase slo puede derivar de una nica clase, con lo cual no es posible realizar herencia mltiple en base a clases. Sin embargo es posible simular la herencia mltiple en base a las interfaces. Interface Una interface es un conjunto de declaraciones de funciones. Si una clase implementa (implements) una interface, debe definir todas las funciones especificadas por la interface. Una clase puede implementar ms de una interface, representando una forma alternativa de la herencia mltiple. Una interface puede derivar de otra o incluso de varias interfaces, en cuyo caso incorpora todos los mtodos de las interfaces de las que deriva. En algunos aspectos las interfaces pueden utilizarse en lugar de las clases. Por ejemplo, las interfaces sirven para definir referencias a cualquier objeto de las clases que implementan esa interface. Este es un aspecto importante del polimorfismo.

12

Polimorfismo en Java. El polimorfismo tiene que ver con la relacin que se establece entre la llamada a un mtodo y el cdigo que efectivamente se asocia con dicha llamada. A esta relacin se llama vinculacin (binding). La vinculacin puede ser temprana (en tiempo de compilacin) o tarda (en tiempo de ejecucin). Con funciones normales o sobrecargadas se utiliza vinculacin temprana (es posible y es lo ms eficiente). Con funciones redefinidas en Java se utiliza siempre vinculacin tarda, excepto si el mtodo es final. El polimorfismo es la opcin por defecto en Java. La vinculacin tarda hace posible que, con un mtodo declarado en una clase base (o en una interface) y redefinido en las clases derivadas (o en clases que implementan esa interface), sea el tipo de objeto y no el tipo de la referencia lo que determine qu definicin del mtodo se va a utilizar. El tipo del objeto al que apunta una referencia slo puede conocerse en tiempo de ejecucin, y por eso el polimorfismo necesita evaluacin tarda. El polimorfismo permite a los programadores separar las cosas que cambian de las que no cambian, y de esta manera hacer ms fcil la ampliacin, el mantenimiento y la reutilizacin de los programas. El polimorfismo puede hacerse con referencias de super-clases abstract, super-clases normales e interfaces. Por su mayor flexibilidad y por su independencia de la jerarqua de clases estndar, las interfaces permiten ampliar muchsimo las posibilidades del polimorfismo.

Veamos un ejemplo Creamos una clase abstracta denominada Animal de la cual deriva las clases Gato y Perro. Ambas clases redefinen la funcin habla declarada abstracta en la clase base Animal. public abstract class Animal { public abstract void habla(); }
13

class Perro extends Animal{ public void habla(){ System.out.println("Guau!"); } } class Gato extends Animal{ public void habla(){ System.out.println("Miau!"); } } El polimorfismo nos permite pasar la referencia a un objeto de la clase Gato a una funcin hazleHablar que conoce al objeto por su clase base Animal public class PoliApp { public static void main(String[] args) { Gato gato=new Gato(); hazleHablar(gato); } static void hazleHablar(Animal sujeto){ sujeto.habla(); }}

El compilador no sabe exactamente que objeto se le pasar a la funcin hazleHablar en el momento de la ejecucin del programa. Si se pasa un objeto de la clase Gato se imprimir Miau!, si se pasa un objeto de la clase Perro se imprimir Guau!. El compilador solamente sabe que se le pasar un objeto de alguna clase derivada de Animal. Por tanto, el compilador no sabe que funcin habla ser llamada en el momento de la ejecucin del programa.

El lenguaje de programacin C++.


14

C++ es un lenguaje de programacin diseado a mediados de los aos 1980 por Bjarne Stroustrup. La intencin de su creacin fue el extender al exitoso lenguaje de programacin C con mecanismos que permitan la manipulacin de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje hbrido. Posteriormente se aadieron facilidades de programacin genrica, que se sum a los otros dos paradigmas que ya estaban admitidos (programacin estructurada y la programacin orientada a objetos). Por esto se suele decir que el C++ es un lenguaje multiparadigma. Encapsulamiento en C++ Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas caractersticas (atributos). Su nmero de patas, el color de su pelaje o su tamao son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase. Este es otro ejemplo de una clase: class Punto { //por omisin los miembros son 'private' para que slo se puedan modificar desde la propia clase. private: // Variable miembro privada int id; protected: // Variables miembro protegidas int x; int y; public: // Constructor
15

Punto(); // Destructor ~Punto(); // Funciones miembro o mtodos int ObtenerX(); int ObtenerY(); }; Herencia en C++. Existen varios tipos de herencia entre clases en el lenguaje de programacin C++. Para no romper el principio de encapsulamiento (ocultar datos cuyo conocimiento no es necesario para el uso de las clases), se proporciona un nuevo modo de visibilidad de los datos/funciones: "protected". Cualquier cosa que tenga visibilidad protected se comportar como pblica en la clase Base y en las que componen la jerarqua de herencia, y como privada en las clases que NO sean de la jerarqua de la herencia. Herencia simple. Ejemplo: clases Barco, Acorazado, Carguero, etc. un Acorazado ES-UN Barco, un Carguero ES-UN Barco, un Trasatlntico ES-UN Barco, etc. En este ejemplo tendramos las cosas generales de un Barco class Barco { protected: char* nombre; float peso; public: //Constructores y dems funciones bsicas de barco }; y ahora las caractersticas de las clases derivadas, podran (a la vez que heredan las de barco) aadir cosas propias del subtipo de barco que vamos a crear, por ejemplo:
16

class Carguero: public Barco { // Esta es la manera de especificar que hereda de Barco private: float carga; //El resto de cosas };

class Acorazado: public Barco { private: int numeroArmas; int Soldados; // Elresto de cosas };

Herencia mltiple La herencia mltiple es el mecanismo que permite al programador hacer clases derivadas a partir, no de una sola clase base, sino de varias. Para entender esto mejor, pongamos un ejemplo: Cuando ves a quien te atiende en una tienda, como persona que es, podrs suponer que puede hablar, comer, andar, pero, por otro lado, como empleado que es, tambin podrs suponer que tiene un jefe, que puede cobrarte dinero por la compra, que puede devolverte el cambio, etc. Si esto lo trasladamos a la programacin sera herencia mltiple (clase empleado_tienda): class Persona { ... Hablar(); Caminar(); ... }; class Empleado {
17

Persona jefe; int sueldo; Cobrar(); ... }; class empleado_tienda: public Persona, Empleado { ... AlmacenarStock(); ComprobarExistencias(); ...}; Por tanto, es posible utilizar ms de una clase para que otra herede sus caractersticas. Este tipo de herencia trae problemas, por ejemplo, cuando dos clases B y C derivan de una clase base A, y a su vez una clase D deriva de B y C. Este problema es conocido con el nombre de diamante.

Polimorfismo en C++ Por definicin, es la capacidad de adoptar formas distintas. En el mbito de la Programacin Orientada a Objetos se entiende por polimorfismo la capacidad de llamar a funciones distintas con un mismo nombre. Estas funciones pueden actuar sobre objetos distintos dentro de una jerarqua de clases, sin tener que especificar el tipo exacto de los objetos. Esto se puede entender mejor con el ejemplo de la siguiente figura: En el ejemplo que se ve en la figura se observa una jerarqua de clases. En todos los niveles de esta jerarqua est contenida una funcin llamada Funcion_1(). Esta funcin no tiene por qu ser igual en todas las clases, aunque es habitual que sea una funcin que efecte una operacin muy parecida sobre distintos tipos de objetos. Es importante comprender que el compilador no decide en tiempo de compilacin cul ser la funcin que se debe utilizar en un momento dado del programa.
18

El lenguaje de programacin C#.


C# (pronunciado "ci sharp") es un lenguaje de programacin orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que despus fue aprobado como un estndar por la ECMA e ISO. Su sintaxis bsica deriva de C/C++ y utiliza el modelo de objetos de la plataforma.NET el cual es similar al de Java aunque incluye mejoras derivadas de otros lenguajes (entre ellos Delphi).

Sintaxis de definicin de clases La sintaxis bsica para definir una clase es la siguiente: De este modo se definira una clase de nombre < Clase_1 > cuyos miembros son los definidos en < miembros > Los miembros de una clase son los datos y mtodos de los que van a disponer todos los objetos de dicha clase. Para declarar una clase sin ningn miembro, utilizaramos una sentencia como esta: class A { } Una clase as declarada no dispondr de ningn miembro excepto los implcitamente definidos de manera comn para todos los objetos que creemos en C#. Estos miembros se definen dentro de la clase primitiva System.Object. El siguiente es un ejemplo de una clase con tres atributos y un mtodo.

19

Herencia en C# En este lenguaje la herencia es de tipo simple, definida anteriormente cuando hacamos referencia a JAVA. Este es un ejemplo de cmo se declarara la herencia en C#. using System; class Persona { public string Nombre; // Campo de cada objeto Persona que almacena su nombre public int Edad; // Campo de cada objeto Persona que almacena su edad public string NIF; // Campo de cada objeto Persona que almacena su NIF void Cumpleaos() // Incrementa en uno de edad del objeto Persona { Edad++; } public Persona (string nombre, int edad, string nif) // Constructor de Persona { Nombre = nombre; Edad = edad; NIF = nif; } } class Trabajador: Persona { public int Sueldo; // Campo de cada objeto Trabajador que almacena cunto gana Trabajador(string nombre, int edad, string nif, int sueldo): base(nombre, edad, nif) { // Se inicializa cada Trabajador en base al constructor de Persona Sueldo = sueldo; }
20

public static void Main() { Trabajador p = new Trabajador("Josan", 22, "77588260-Z", 100000); Console.WriteLine ("Nombre="+p.Nombre); Console.WriteLine ("Edad="+p.Edad); Console.WriteLine ("NIF="+p.NIF); Console.WriteLine ("Sueldo="+p.Sueldo); } } Polimorfismo en C#. Es otro de los pilares fundamentales de la programacin orientada a objetos. Es la capacidad de almacenar objetos de un determinado tipo en variables de tipos antecesores del primero a costa, claro est, de slo poderse acceder a travs de dicha variable a los miembros comunes a ambos tipos. Sin embargo, las versiones de los mtodos virtuales a las que se llamara a travs de esas variables no seran las definidas como miembros del tipo de dichas variables, sino las definidas en el verdadero tipo de los objetos que almacenan. A continuacin se muestra un ejemplo (programa4) de cmo una variable de tipo Persona puede usarse para almacenar objetos de tipo Trabajador. En esos casos el campo Sueldo del objeto referenciado por la variable no ser accesible, y la versin del mtodo Cumpleaos() a la que se podra llamar a travs de la variable de tipo Persona sera la definida en la clase Trabajador, y no la definida en Persona: using System; class Persona { public string Nombre; // Campo de cada objeto Persona que almacena su nombre public int Edad; // Campo de cada objeto Persona que almacena su edad public string NIF; // Campo de cada objeto Persona que almacena su NIF public virtual void Cumpleaos() // Incrementa en uno la edad del objeto Persona
21

{ Console.WriteLine(Incrementada edad de persona); } public Persona (string nombre, int edad, string nif) // Constructor de Persona { Nombre = nombre; Edad = edad; NIF = nif; } } class Trabajador: Persona { int Sueldo; // Campo de cada objeto Trabajador que almacena cunto gana Trabajador(string nombre, int edad, string nif, int sueldo): base(nombre, edad, nif) { // Inicializamos cada Trabajador en base al constructor de Persona Sueldo = sueldo; } public override Cumpleaos() { Edad++; Console.WriteLine("Incrementada edad de trabajador"); } public static void Main() { Persona p = new Trabajador("Josan", 22, "77588260-Z", 100000); p.Cumpleaos(); // p.Sueldo++; //ERROR: Sueldo no es miembro de Persona } } GENERICIDAD EN LA PROGRAMACIN ORIENTADO A OBJETOS.
22

La programacin genrica es un tipo de programacin que est mucho ms centrada en los algoritmos que en los datos. La idea de esta forma de programar pretende generalizar las funciones utilizadas para que puedan usarse en ms de una ocasin. Esto se consigue parametrizando lo mximo posible el desarrollo del programa y expresados o devueltos de la forma ms simple posible, evitando detalles concretos. La biblioteca de funciones conseguida con esta manera de programa permite que esas funciones puedan servir para ms programas de los que, otras ms concretas, podran ser tiles; y tambin aplicando pocos cambios, conseguir que realice diferentes acciones. La parametrizacin en los algoritmos, supone un aporte a las tcnicas de programacin, al menos tan importante, como ha sido la introduccin del concepto de herencia; y que permite resolver nuevos problemas. Clases genricas en JAVA. Permite disear clases y mtodos que aplazan la especificacin de uno o ms tipos hasta que el cdigo de cliente declara y crea una instancia de la clase o del mtodo. Por ejemplo, mediante la utilizacin de un parmetro de tipo genrico T, se puede escribir una clase nica que otro cdigo de cliente puede utilizar sin generar el costo o el riesgo de conversiones en tiempo de ejecucin u operaciones de conversin, como se muestra a continuacin: public class Computadora<T> { private T teclado; public Computadora(T teclado) { this.teclado=teclado;} public T getTeclado{ return teclado;} public void setTeclado(T teclado){ this.teclado=teclado;} public static void main(String argumentos[]){
23

Computadora <String> t Computadora<String>(Hanel); Strign marca = t.getTeclado;}} En el caso de la declaracin de los mtodos genricos se sigue el mismo procedimiento. Clases genricas en C# / Declaracin de la clase genrica. public class GenericList<T> { void Add(T input) { } } class TestGenericList { private class ExampleClass { } static void Main() { // Declaracin de una lista de tipo entero. GenericList<int> list1 = new GenericList<int>(); // Declaracin de una lista de tipo String. GenericList<string> list2 = new GenericList<string>(); // Declaracin de una lista ExampleClass. GenericList<ExampleClass> list3 = new GenericList<ExampleClass>(); } }

24

A manera de conclusin se puede plantear que la tecnologa orientada a objetos permite el diseo e implementacin de sistemas bajo un paradigma de programacin en el cual, por medio de la abstraccin se definen a las clases o entidades de software a partir de entidades del mundo real. De dichas entidades se instancian objetos de software que se correspondern con los objetos reales que representan. Esto permite un enfoque ms centrado en la solucin del problema.

25

En lenguajes de programacin orientada a objetos, el problema del diamante es una ambigedad que surge cuando dos clases B y C heredan de A, y la clase D hereda de B y C. Si un mtodo en D llama a un mtodo definido en A, por qu clase lo hereda, B o C? Por ejemplo, en el contexto del desarrollo de software GUI, una clase Botn puede heredar de las clases Rectngulo (para la apariencia) y Ratn (para los eventos de ratn), y las clases Rectngulo y Botn heredar a su vez de la clase Objeto. Si ahora el mtodo EsIgualA es llamado para un objeto Botn y ese mtodo no est definido en la clase Botn pero s para Rectngulo y tambin para Ratn, cul de los dos mtodos debera ser finalmente llamado? Se llama el problema del 'diamante' por la forma del diagrama de herencia de clase en esta situacin. La clase A est arriba, B y C estn separadas debajo de ella, y D se une a las dos en la parte inferior consiguiendo la forma de un diamante.

26

El presente trabajo ha sido realizado con el objetivo de realizar una investigacin con el fin de conocer las particularidades de otros lenguajes de programacin, la forma de implementar las mismas funciones, mtodos y procedimientos. Resulta de gran inters aplicar los conocimientos adquiridos en clases en el lenguaje JAVA y aplicarlos en otros con el fin de aumentar las habilidades en la programacin. Toda informacin consultada para el presente trabajo es patentada, de modo que cada porcin de cdigo que se relaciona es funcional. La realizacin de este seminario es apenas el comienzo de un estudio sobre los paradigmas y lenguajes de programacin. Se recomienda seguir abundando en el tema y explorar otros lenguajes que aqu no se relacionan. Incluso se considera que sera vlida una comparacin con lenguajes que no estn relacionados con la tecnologa orientada a objetos.

27

http://www.fdi.ucm.es/profesor/lgarmend/LPS/Tema%204%20Diferencias

%20entre%20Java%20y%20C++.pdf
http://es.wikipedia.org

http://tikal.cifn.unam.mx/~jsegura/LCGII/java5.htm

http://msdn.microsoft.com/es-es/library/ac30fak4.aspx

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Funciones

http://www.scielo.org.pe/scielo.php?script=sci_arttext&pid=S1810-99932

Miguel ngel Gmez Vicente, Manuel Martn Mohedano Introduccin a C#,

Departamento de Informtica y Automtica Universidad de Salamanca. Michael Gonzlez Harbour, Estructuras de datos y algoritmos, Departamento de Matemtica Estadstica y Computacin Universidad de Cantabria. Gonzalo Mndez Pozo, Introduccin a Java, Departamento de Ingeniera de Software e Inteligencia Artificial Universidad Complutense de Madrid. Eduardo Raffo Leca, Programacin Genrica en C++, usando

Metaprogramacin

28

Das könnte Ihnen auch gefallen