Herencia e Interfaces

Save this PDF as:
 WORD  PNG  TXT  JPG

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Herencia e Interfaces"

Transcripción

1 Herencia Introducción En C# cualquier dato es un objeto porque todos los tipos derivan implícitamente de este tipo, y heredan los métodos y campos definidos en dicha clase. Cada nuevo tipo tiene todo lo que tiene el tipo object y puede utilizarlo e incluso redefinirlo- y añade una serie de campos y métodos. Cuando, por ejemplo, se está diseñando una interfaz gráfica, sería absurdo tener que escribir todo el código para cada ventana cuando muchas de ellas son casi iguales y realizan tareas parecidas. Lo lógico es aprovechar ese código que ya está escrito y probado y cambiar y añadir lo que sea necesario para ir obteniendo nuevas ventanas particularizadas. Piense, por ejemplo, en un cuadro de diálogo común. Resulta coherente escribir un código bastante general que sirva para cualquier ventana y posteriormente modificarlo que no sea redimensionable, que tenga un título diferente, etc-, añadiendo características nuevos botones, etc- o cambiando algunas de ellas. La herencia proporciona un mecanismo para definir una nueva clase, a partir de otra que ya existe, modificándola. La nueva clase que se define, se denomina clase derivada y la clase de la que se hereda se llama clase base. La clase derivada es la misma clase base a la que se añaden nuevos miembros (campos, métodos, etc) y/o se redefinen alguno de ellos. La clase base puede ser a su vez, clase derivada de otra. Cuando hay muchas clases relacionadas entre sí por el mecanismo de la herencia, se habla de jerarquía de clases. La herencia proporciona dos grandes ventajas al programador: por un lado, permite la reutilización de código y por otro permite el polimorfismo de referencias. Fundamentos de la herencia Para indicar que una clase hereda de otra, se utiliza el siguiente formato general: [modificador] class ClaseDerivada : ClaseBase //Cuerpo de la clase La clase derivada hereda todos los miembros de la clase base, es decir, tiene todos y cada uno miembros de la clase base y los que el programador desee añadir. Ejemplo: using System; namespace Herencia public class ClaseBase 1/21

2 public int a; public int b; public void Imprimir_ab() Console.WriteLine("a=0,b=1",a,b); public class ClaseDerivada:ClaseBase public int c; public void Imprimir_c() Console.WriteLine("c=0",c); public void ImprimirSuma() Console.WriteLine("Suma=0",a+b+c); class HerenciaApp static void Main(string[] args) //Se crean objetos de las clases base y derivada ClaseBase clasebase=new ClaseBase(); ClaseDerivada clasederivada=new ClaseDerivada(); //La clase base puede invocar sus miembros desde Main clasebase.a=11; clasebase.b=12; //se imprimen los campos de la clase base clasebase.imprimir_ab(); //La clase Derivada tiene como miembros propios //todos los de la clase base clasederivada.a=25; clasederivada.b=26; clasederivada.c=27; clasederivada.imprimir_ab(); //y los añadidos por el programador clasederivada.imprimir_c(); clasederivada.imprimirsuma(); La salida de este programa es: a=11, b=12 a=25, b=26 c=27 Suma=78 2/21

3 En este ejemplo se observa que la ClaseDerivada tiene como miembros todos los miembros que ha definido como propios y todos los miembros que tiene la clase de la que deriva. Es decir, su miembros son: Campos: a, b y c Métodos: Imprimir_ab(), Imprimir_c(), ImprimirSuma() Por eso, el objeto clasederivada puede acceder a los campos a y b e invocar el método Imprimir_ab()y puede llamar desde un método propio como es ImprimirSuma()a los campos a y b directamente. En este caso, se dice que la clase ClaseDerivada deriva de la clase ClaseBase o que la clase ClaseBase es una superclase (clase padre) de la ClaseDerivada -(clase hija o subclase). Control de acceso a los miembros de la clase base Los modificadores de acceso de los miembros de la superclase y de la subclase definen el encapsulamiento y el interfaz de la clase. La forma de acceso a cada uno de los miembros heredados de la clase derivada, depende de los modificadores de acceso que cada uno de dichos miembros tenga en la clase base. En el primer ejemplo se ha considerado que todos los miembros fueran públicos para explicar directamente la herencia. En general, esto no es una buena práctica de programación. Los datos de una clase deben estar protegidos. Se ha estudiado con anterioridad cómo es el acceso a los miembros de una clase, dependiendo de cómo esté definido cada uno de los miembros public o private-. El problema que aparece con la herencia es el control de acceso a los miembros de la clase base por parte de la clase derivada. Dicho de otro modo: puede un método de la clase derivada acceder a miembros privados de la clase base? Como anteriormente se ha explicado, no se puede acceder a campos privados desde ninguna clase. Sin embargo, sería muy conveniente que desde la clase derivada se pudiera llamar a los miembros privados de la clase base ya que éstos son heredados. Esto es posible con el modificador de acceso protected. Un dato precedido por este modificador es público para cualquier clase derivada pero privado para el resto de las clases. Es acceso a los datos se puede resumir esquemáticamente en estos tres puntos: a) Un miembro de la clase base declarado como public, pasa a ser un miembro public en la clase derivada, es decir, puede ser utilizado sin ningún tipo de restricción por la clase derivada, tanto en su propio código como desde el exterior de la clase que la ha definido. b) Un miembro declarado como private en la clase base, aunque pertenece a la clase derivada, no puede ser llamado ni desde el propio código de la clase derivada ni, por supuesto, desde ningún código exterior a su clase. Dicho de otro modo: aunque una clase derivada incluye todos los miembros de la clase base de 3/21

4 la que deriva, no puede acceder a aquellos miembros que han sido declarados como private en la clase base. c) Un miembro declarado como protected, puede ser llamado desde el interior del código de la clase derivada pero no desde el exterior de dicha clase, es decir, los objetos de la clase derivada no pueden acceder a ellos. Un miembro protected es en realidad un miembro private para cualquier clase excepto para una clase derivada, que es public, con la excepción antes aludida. El siguiente ejemplo sirve para ilustrar lo anterior: using System; namespace AccesoConHerencia public class Base private int xpri; public int ypub; protected int zpro; public void Imprimir() //este metodo puede llamar a todos los miembros // public y private desde la propia clase Console.WriteLine("xPri=0,yPub=1,zPro=2",xPri, ypub, zpro); public class Derivada : Base int x; public void Suma() //Este método no puede utilizar xpri, //por ser privado en la clase base Console.WriteLine("Suma=0",yPub+zPro+x); class Aplicacion static void Main(string[] args) Base unaclasebase=new Base(); //ERROR. Miembro privat //unaclasebase.xpri=2; unaclasebase.ypub=3; //ERROR. Miembro protected //unaclasebase.zpro=4; Derivada unaclasederivada=new Derivada(); //ERROR. Miembro private //unaclasederivada.xpri=12; 4/21

5 unaclasederivada.ypub=13; //ERROR. Es miembro protected //unaclasederivada.zpro=14; //ERROR. Es miembro private //unaclasederivada.x=15; unaclasebase.imprimir(); unaclasederivada.imprimir(); unaclasederivada.suma(); La salida de este programa es: xpri=0; ypub=3, zpro=0 xpri=0; ypub=13, zpro=0 Suma=13 La herencia es muy importante en la programación orientada a objetos. C# proporciona una serie de librerías que es muy importante conocer para poder aprovecharla en su integridad. En la totalidad de los programas gráficos, el programador aprovecha ese código ya optimizado y probado por Microsoft heredando de algunas clases para con algunas modificaciones y añadidos escribir su código. Sobrescritura Muchas veces resulta muy útil y dota a la programación orientada a objetos de una extraordinaria flexibilidad, poder redefinir sobrescribir- un método o propiedad de la clase base en la clase derivada. En C#, el programador debe indicar qué métodos de una clase pueden ser sobrescritos y cuáles no. Para ello lo debe indicar por medio del modificador virtual. En la clase derivada se debe preceder el nombre del método del modificador override. No es posible cambiar la accesibilidad del método en la clase derivada. La palabra reservada base permite utilizar los métodos de la clase base que están sobrescritos en la clase derivada. Para explicar este concepto, se va a utilizar un ejemplo anterior, se va a sobrescribir el método Imprimir(): using System; namespace ConsoleApplication1 5/21

6 public class ClaseBase public int a; public int b; public virtual void Imprimir() Console.WriteLine("a=0,b=1",a,b); public class ClaseDerivada:ClaseBase public int c; public override void Imprimir() Console.WriteLine("a=0,b=1,c=2",a,b,c); class HerenciaApp static void Main(string[] args) ClaseBase clasebase=new ClaseBase(); ClaseDerivada clasederivada=new ClaseDerivada(); clasebase.a=11; clasebase.b=12; clasebase.imprimir(); clasederivada.a=25; clasederivada.b=26; clasederivada.c=27; clasederivada.imprimir(); La salida de este programa es: a=11, b=12 a=25, b=26, c=27 En este sencillo ejemplo, se ha sobrescrito el método Imprimir(). Para ello, en la clase base se define Imprimir() precedido del modificador virtual: public virtual void Imprimir() En la clase derivada, el método que se sobrescribe debe tener el mismo nombre e ir precedido del modificador override, que indica que en la clase base existe un método con el mismo nombre y con código diferente. public override void Imprimir() Dependiendo del objeto que lo llama, el compilador decide si utiliza el método de la clase base o el de la derivada. 6/21

7 Para invocar un método de la clase base que está sobrescrito en la clase derivada se utiliza la referencia base. Por ejemplo, si desde la clase base se desea llamar al método Imprimir() de la clase base se invoca de la siguiente forma: base.imprimir(). Por ejemplo, se podría haber definido el método Imprimir() en la clase derivada de la siguiente manera: public class ClaseDerivada:ClaseBase public int c; public override void Imprimir() base.imprimir(); Console.WriteLine("c=0",c); El mismo código del ejemplo anterior daría una salida del programa ligeramente diferente: a=11, b=12 a=25, b=26 c=27 Esto es así porque al ejecutar base.imprimir(); el compilador realiza un salto de línea. Sin embargo, en el siguiente apartadose tratará este concepto con más detalle. Constructores y herencia Orden de ejecución de los constructores Cuando se invoca a un constructor de la clase derivada, se ejecuta previamente, por defecto, el constructor de la clase base. Por ejemplo: using System; namespace Herencia public class ClaseBase int x,y; public ClaseBase() Console.WriteLine("Constructor de la clase base"); 7/21

8 public class ClaseDerivada : ClaseBase int z; public ClaseDerivada() Console.WriteLine("Constructor de la clase derivada"); public class Aplicacion static void Main(string[] args) ClaseDerivada d=new ClaseDerivada(); La salida de este programa es la siguiente: Constructor de la clase base Constructor de la clase derivada Palabra reservada base En ocasiones, puede ser interesante ejecutar el constructor de la clase base proporcionándole algunos argumentos o ejecutar algún método de la clase base desde el código de la clase derivada. Para ello se utiliza la palabra base. base es muy parecido a this. La diferencia más importante es que la segunda se refiere siempre al propio objeto, y base hace referencia a la superclase, a la clase de la que deriva la clase actual, a la clase padre. base puede utilizarse de dos formas: A) Para hacer referencia a alguno de los constructores de la clase base en la clase derivada. Como ejemplo, se va a calcular el área de un cilindro. Se definen las clases Circulo - con dos campos, uno constante y que define PI, y el radio- y la clase Cilindro, que se considera como un círculo al que se le ha añadido una altura. El área de un círculo es el producto de π por el cuadrado del radio, y el de un cilindro es el área de la base que es un círculo- por la altura. De esta manera, se tendrá que sobrescribir el método Area() en la clase derivada. using System; namespace TemasMatematicos public class Circulo public const double PI= ; protected double radio; public Circulo(double radio) this.radio=radio; 8/21

9 public virtual double Area() return PI*radio*radio; public class Cilindro : Circulo double altura; public Cilindro(double radio,double altura):base(radio) this.altura=altura; public override double Area() return PI*radio*radio*altura; class Aplicacion static void Main(string[] args) Cilindro c=new Cilindro(1,2); Console.WriteLine("Area=0",c.Area()); La salida de este programa es: Area= Este programa tiene alguna líneas en la que en importante detenerse. a) public virtual double Area() En la clase base, Circulo, se define el método Area() como virtual, para indicar que será sobrescrito en la clase derivada. b) public override double Area() En la clase Cilindro que deriva de la clase Circulo, se sobrescribe este método para calcular el área del cilindro ya que parece que se debería llamar de la misma manera y se precede del modificador override. c) public Cilindro(double radio,double altura):base(radio) En esta sentencia se invoca en primer lugar el constructor de la clase base para que inicialice el radio y después se ejecuta el código de la clase derivada. En general, para ejecutar el constructor de la clase base, en la misma línea donde se define el constructor de la clase derivada, se sigue la palabra base con los argumentos necesarios para que se ejecute un determinado constructor de la superclase precedida de :. Dependiendo del constructor de la clase base, se utilizan unos argumentos u otros. 9/21

10 También se puede llamar a un constructor de la misma clase, escribiendo después del constructor :this(),de la misma forma que se ha hecho con :base(). B) Para invocar un método de la clase base desde la clase derivada se utiliza cuando dicho método está sobrecargado-. Este concepto se ha explicado brevemente con anterioridad. Sin embargo, se aprovecha este ejemplo para profundizar un poco más en él. Si se quiere invocar un método de la clase base se puede invocar con la palabra reservada base, de la misma forma que se utiliza para llamar al objeto actual con this. Así, en el ejemplo anterior, si se quiere invocar el método Area() de la clase Circulo, desde el código de la clase derivada se hace de la siguiente manera: base.area(). En ese mismo bloque de código es decir, en la clase derivada- para referirse al método Area() de la clase Cilindro, se puede hacer de dos formas: Area() o bien this.area() Por ejemplo, public class ClaseDerivada : ClaseBase public void HacerAlgoDeAlgunaManera() base.haceralgo(); //realizar el resto del procedimiento En el ejemplo se observa que con la línea: base.haceralgo(); se refiere al método de la clase base, que tendrá el mismo nombre que en la clase derivada. Polimorfismo de referencias Se puede asignar a una referencia de una superclase una referencia de una subclase. Esta es una característica muy útil y tremendamente potente de C#, que también se encuentra en C++ y en Java, aunque con diferencias sustanciales. 10/21

11 El siguiente ejemplo sirve para explicar este concepto: using System; namespace Polimorfismo public class Caja protected double x; protected double y; protected double z; public Caja(double ancho, double largo, double alto) x=ancho; y=largo; z=alto; public double Volumen() return x*y*z; public class CajaConPeso : Caja public double Peso; public CajaConPeso(double a, double b, double c, double peso) : base(a,b,c) this.peso=peso; public class MiClaseApp static void Main(string[] args) //Se obtienen referencias a objetos //de las clases base y derivada Caja refcaja=new Caja(1,2,3); CajaConPeso refcajaconpeso=new CajaConPeso(3,4,5,6); double volumen; volumen=refcaja.volumen(); Console.WriteLine("Vol=0",volumen); //se asigna una referencia de la clase base //a una refencia. de la clase derivada refcaja=refcajaconpeso; volumen=refcaja.volumen(); Console.WriteLine("Vol=0",volumen); //Console.WriteLine("Peso=0", refcaja.peso); La salida de este programa es: Vol=6 11/21

12 Vol=60 refcajaconpeso es una referencia a un objeto de la clase CajaConPeso clase derivada- y refcaja una referencia a un objeto de la clase Caja clase base-. Como CajaConPeso es una subclase de Caja es posible asignar a refcaja la referencia refcajaconpeso. Es muy importante entender bien que el que determina qué miembros son accesibles y cuáles no es el tipo de variable de referencia ni el tipo de objeto al que se refiere. Cuando una referencia a un objeto de una subclase se asigna a una referencia de la superclase, sólo se tiene acceso a aquéllas partes del objeto definidas en la superclase (figura 6.1). Por eso, aunque ahora refcaja y refcajaconpeso referencian al mismo objeto de la clase CajaConPeso, refcaja no puede acceder al campo Peso a pesar de ser una referencia a un objeto de la clase CajaConPeso. Esto tiene sentido ya que la clase base la superclase- no tiene conocimiento no puede ver y por lo tanto tampoco acceder o invocar- a lo que en la clase derivada se añade a su propia definición. No es posible para una referencia de tipo Caja acceder al campo Peso ya que no ha sido definido en la clase base Caja. Por eso, la última línea de este programa está comentada, porque daría un error al compilar. Se podría haber creado esa referencia directamente, al crear un objeto de la clase derivada, es decir, Caja refcaja=new CajaConPeso(3,4,5,6); En este caso, refcaja es una referencia de tipo Caja a un objeto de tipo CajaConPeso. Esto es extraordinariamente importante y dota de una gran flexibilidad y potencia a este lenguaje, ya que si una superclase contiene un método que está sobrescrito en la subclase, entonces, cuando se referencian distintos tipos de objetos a través de una variable de referencia de la superclase, se ejecutan distintas versiones del método. refcaja refcajacopeso x y z Volumen() x y z Volumen() Objeto tipo Caja Peso Objeto tipo CajaConPeso Figura 6.1: La referencia refcaja sólo puede invocar los miembros de la clase derivada que conoce, que son los que tiene en la superclase. 12/21

13 por ejemplo: suponga que se desea definir un método que puede admitir como parámetro cualquier tipo de dato. Dicho método podría tener la siguiente forma: public void UnMetodo(object obj) //codigo Como hasta ahora se ha venido repitiendo, todo dato en C# es un objeto, deriva de él y por lo tanto puede tratarse como tal. El polimorfismo de referencias nos permite escribir el siguiente fragmento de código: string unstring = Hola Mundo ; int unentero = 3; const double PI = 3.14; MiClase unaclase = new MiClase(); ClaseDeMicrosoft otraclase = new ClaseDeMicrosoft(); UnMetodo(unString); UnMetodo(unEntero); UnMetodo(PI); UnMetodo(unaClase); UnMetodo(otraClase); Observe que no se ha sobrecargado el método UnMetodo. El código anterior es posible por el polimorfismo de referencias, porque realmente, ocurre lo siguiente: object refobj; //Inicialmente null, no referencia a nada string unstring = Hola Mundo ; refobj = unstring; UnMetodo(refObj);... La referencia al string unstring, apunta a un objeto que es la cadena Hola Mundo, que como todo string es un objeto, es decir, deriva de object. Por el polimorfismo de referencias, es posible asignar una referencia de una clase en este caso un string- a una referencia de una superclase en este caso a object-. Esta técnica permite tratar los datos de manera genérica. El polimorfismo de referencias existe también en Java pero la técnica para conseguirlo es menos directa y complicada que en C#, ya que en Java no todos los tipos de datos son objetos. En concreto, no lo son los llamados tipos simples, aunque Java proporciona a todos ellos una clase intermedia llamada envoltorio que los convierte en clases. Pero siempre es necesario realizar un paso intermedio para convertir los llamados tipos básicos a tipos de su clase envoltorio. En C# no es necesario realizar este paso, porque los tipos de datos son objetos. Esta manera de trabajar proporciona una enorme potencia a este lenguaje. 13/21

14 Interfaces. Una interface garantiza un determinado comportamiento de una clase o estructura. Cuando una clase implementa una interface se garantiza que soportará los métodos, propiedades, eventos e indexadores de la interface. La interface es una alternativa a una clase abstracta. Una interface es similar a una clase o a una estructura, pero sus miembros son abstractos, es decir, no están definidos, no tienen código. Declara modos de comportamiento, pero deja su definición para las clases que la implementen. Cuando una clase implementa una interface, debe implementar todos los métodos de la interface. Hay una gran diferencia entre heredar de una clase abstracta e implementar una interface. Por ejemplo: un Coche es un vehículo hereda las características y comportamiento de un vehículo-, pero puede tener la capacidad de PoderRegularLaTemperatura (como una casa, por ejemplo). Cuando se hereda, se hace referencia a lo que se es, y cuando se implementa una interface se hace referencia a la capacidad de comportarse de una determinada manera. En este capítulo se estudia cómo crear, implementar y usar las interfaces. Además, se tratará cómo implementar múltiples interfaces. Estructura de una interface. La estructura de una interface es la siguiente: [atributos OPC ] [modificadores de acceso OPC ] interface NombreDeLaInterface [:interfacesbase] //Cuerpo de la interface Los atributos se tratarán más adelante. Por ahora es suficiente con decir que los atributos en C# contienen información sobre el tipo de dato y puede ser consultada mediante reflexión. Los atributos son opcionales. Los modificadores de acceso opcionales- pueden ser los mismos que los de las clases y con el mismo efecto, a excepción de abstract y sealed, que no tienen sentido para una interface, es decir: new, public, protected, internal y private. La palabra interface es seguida del nombre de la interface. Generalmente aunque no hay porqué hacerlo así- se suele utilizar -como convenio- un nombre que comience por la letra mayúscula I, como IClonable, IMiInterface, etc... Si la interface hereda a su vez de otras interfaces, entonces, después del nombre de la interface se escribe dos puntos (:) y, separados por comas, los nombres de las interfaces que implementa. 14/21

15 Por ejemplo: interface IAvion : IVolar, IVehiculo //Código Suponga que desea crear una interface que defina la capacidad de ser imprimible que se llame IImprimible y que tenga un método que se llame Imprimir() La definición sería: interface IImprimible void Imprimir(); Por ejemplo, se puede crear una clase Documento. Para indicar que el tipo Documento se puede imprimir basta con que implemente la interface IImprimible. Implementar una interfce no es más que escribir código en los métodos definidos en la interface. La sintaxis es la misma que si derivara de la interface, aunque, como se ha dicho, es necesario implementar todos los métodos de la interface. Por ejemplo: public interface IImprimible void Imprimir(); public class Documento : IImprimible string contenido; public Documento(string frase) contenido=frase; public void Imprimir() Console.WriteLine(contenido); class MiAplicacion static void Main(string[] args) Documento undocumento=new Documento("Contenido 1"); undocumento.imprimir(); La salida de este programa es: Contenido 1 15/21

16 Suponga que se desea crear otra interface que defina el comportamiento necesario para guardar y leer desde una fuente de datos una base de datos, o el disco duro,...-. Se le llamará, por ejemplo, IArchivable. Esta interface podría tener dos métodos: Leer() y Escribir(). Una posible definición es, por ejemplo: interface IArchivable void Leer(); void Escribir() Para indicar que la clase Documento tiene la capacidad de ser almacenado en el disco duro, basta con que implemente la interface IArchivable e IImprimible. public class Documento: IImprimible, IArchivable void Leer() //Código que implementa el método void Escribir() //Código que implementa el método public void Imprimir() //Código que implementa el método //Otros miembros y código propio de la clase Documento Es responsabilidad del autor de la clase Documento implementar o definir el comportamiento de los métodos de la interface. Si una clase implementa una interface debe implementar de manera obligatoria todos los métodos de la interface. Todos los miembros de una interface son públicos por defecto- para que puedan ser implementados por otras clase. Por esta razón no llevan ningún modificador. A continuación se escribe un ejemplo completo. Se define una nueva clase, Rectángulo, que implemente la interface IImprimible. Se puede observar cómo se definen de manera diferente el mismo método Imprimir() en las dos clases y cómo el Rectángulo no tiene la capacidad de ser almacenado en disco. El ejemplo completo sería: interface IArchivable void Leer(); void Escribir(); 16/21

17 public interface IImprimible void Imprimir(); public class Rectangulo : IImprimible int ancho; int alto; public Rectangulo(int lado1, int lado2) ancho=lado1; alto=lado2; public void Imprimir() Console.WriteLine("ancho=0,alto=1",ancho,alto); public class Documento : IImprimible, IArchivable string contenido; public Documento(string frase) contenido=frase; public void Imprimir() Console.WriteLine(contenido); public void Leer() Console.WriteLine("Leyendo CONTENIDO desde le disco duro"); public void Escribir() Console.WriteLine("Escribiendo CONTENIDO en disco duro"); class MiAplicacion static void Main(string[] args) Documento undocumento=new Documento("Contenido 1"); Rectángulo unrect = new Rectángulo(12,13); undocumento.escribir(); undocumento.leer(); undocumento.imprimir(); unrect.escribir(); Polimorfismo de referencias Se vuelve a estudiar aquí el polimorfismo de referencias, pero ahora desde un punto de vista distinto: la interface. 17/21

18 No es posible crear objetos de tipo interface. Esto es lógico si pensamos que sus métodos están declarados, pero no definidos. No tendría sentido un objeto sin métodos implementados. Por esta razón, no se puede escribir: IImprimible refinterface = new IImprimible(); Sin embargo, puede crearse una referencia de tipo interface para que apunte a cualquier objeto de un tipo que implemente dicha interface. Por ejemplo: IImprimible refinterface; Documento undocumento=new Documento( texto del documento ); refinterface = (IImprimible)unDocumento; o bien, de manera más comprimida: IImprimible refinterface=(iimprimible)new Documento( otro texto ); Se tiene la garantía de que cualquier clase que implemente la interface IImprimible tendrá implementado el método Imprimir(). Por eso, tiene sentido que una referencia a una interface pueda invocar todos los métodos -que tenga declarados como interface- del objeto al que apunta. Sin embargo, la interface IImprimible no conoce cómo cada clase lo implementa ni le hace falta saberlo- ni qué más miembros tienen dichas clases. Por eso no puede invocar aquellos métodos, propiedades, etc, que sean únicamente propios del objeto. Para ilustrar esta idea, piense en la aplicación anterior con el siguiente código en el método Main(): Documento doc=new Documento("contenido del documento"); IImprimible refinterfaceimprimible=doc; refinterfaceimprimible.imprimir(); o bien: IImprimible refinterfaceimprimible; refinterfaceimprimible=new Documento("Una frase"); refinterfaceimprimible.imprimir(); En resumen: una referencia a una determinada interface, puede apuntar a cualquier objeto de una clase o estructura que la implemente. Esto convierte el polimorfismo de referencias en una herramienta extremadamente flexible y poderosa. En el ejemplo anterior la clase Rectangulo implementa la interface IImprimible y la clase Documento las interfaces IImprimible e IArchivable. Gracias al polimorfismo de referrencias se puede escribir: Documento doc=new Documento("contenido del documento"); Rectangulo rect=new Rectangulo(12,10); IImprimible refinterfaceimprimible=doc; 18/21

19 refinterfaceimprimible.imprimir(); refinterfaceimprimible=rect; refinterfaceimprimible.imprimir(); o bien: IImprimible refinterfaceimprimible; refinterfaceimprimible=new Documento("Una frase"); refinterfaceimprimible.imprimir(); refinterfaceimprimible=new Rectangulo(12,10); refinterfaceimprimible.imprimir(); Miembros de interface. Los miembros de una interface son: - Los que hereda de las interfaces base. - Los que se declaran en la propia interface. Una interface puede declarar cero o más miembros, los cuales tienen acceso public por defecto. Por lo tanto, los miembros de una interface no pueden ser declarados con los modificadores abstract, public, protected, internal, private, virtual, override, o static. Herencia de interfaces. Una interface puede heredar cero o más interfaces de modo explícito (herencia múltiple de interfaces). A tales interfaces se les llama interfaces base explícitas. No obstante, una interface no sólo hereda las interface que explícitamente indica, sino también aquéllas heredadas implícitamente, es decir, aquéllas que han heredado las interface de las que hereda. Por ejemplo: interface IControl void Paint(); // ITextBox hereda de IControl interface ITextBox: IControl void SetText(string text); // IListBox hereda de IControl interface IListBox: IControl void SetItems(string[] items); interface IComboBox: ITextBox, IListBox //... 19/21

20 La interface IComboBox tendrá todos los métodos de las interfaces ITextBox y de IListBox, y por lo tanto, los de IControl, ya que implícitamente la hereda. Implementación de una interface. Las interfaces pueden ser implementadas mediante clases y estructuras. Para indicar que una clase o estructura implementa una interface se ha de incluir el identificador de la interface en la lista de tipos base de la clase o estructura. Ejemplo: interface IControl void Paint(); interface ITextBox: IControl void SetText(string text); class TextBox: ITextBox public void Paint()... public void SetText(string texto) En este caso la clase TextBox no sólo implementa ITextBox, sino también IControl. Utilización de los operadores is y as con interfaces Este operador se utiliza para averiguar si un determinado objeto soporta una interface. Su formato general es: objeto is tipo La expresión anterior devuelve True en caso de que objeto soporte o implementa la interface tipo. En caso contrario devuelve False. Por ejemplo: Rectangulo rect = new Rectangulo(13,15); if( rect is IImprimible ) IImprimible refinterface = (IImprimible) rect; refinterface.imprimir();... Pero el uso de is es ineficaz porque puede generar excepciones. Una solución mejor es utilizar el operador as. 20/21

21 Este operador combina el operador is y un casting o conversión de tipos. Primero se chequea si la conversión es válida y si es así, se realiza la conversión. En caso contrario, se devuelve null. La expresión general es: objeto as tipo Por ejemplo: Rectangulo rect = new Rectangulo(13,15); IImprimible refinterface = rect as IImprimible; if(refinterface!= null) refinterface.imprimir(); else Console.WriteLine( Rectangulo no soporta Iimprimible )... 21/21

Prácticas de Programación

Prácticas de Programación Prácticas de Programación Tema 1. Introducción al análisis y diseño de programas Tema 2. Clases y objetos Tema 4. Tratamiento de errores Tema 5. Aspectos avanzados de los tipos de datos Tema 6. Modularidad

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer jorgeeie@uabc.mx Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la

Más detalles

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase Java: Clases y Objetos Clases La unidad fundamental de programación en Java es la clase Un programa Java está formado por un conjunto de clases Una clase es una plantilla que describe un conjunto de objetos

Más detalles

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases Programación Avanzada para Sistemas de Telecomunicación Objetos y clases Juan Carlos Cruellas cruellas@ac.upc.es Objetos y clases Concepto de objeto. Concepto de clase. Clases, objetos y programas. Clases

Más detalles

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Tipos de herencia Herencia y niveles de visibilidad Herencia y creación Redefinición de métodos Conversión

Más detalles

Introducción. Herencia y Polimorfismo. Ejemplos (I) Ejemplos (II) Control de Acceso. Herencia

Introducción. Herencia y Polimorfismo. Ejemplos (I) Ejemplos (II) Control de Acceso. Herencia Introducción Herencia y Polimorfismo Se pueden definir jerarquías de clases, con clases generales que definen el comportamiento común a unos objetos y clases específicas que sólo añaden o redefinen el

Más detalles

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK. Introducción Java surgió en 1991 dentro de la empresa Sun Microsystems como un lenguaje de programación sencillo y universal destinado a electrodomésticos. La reducida potencia de cálculo y memoria de

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

POLIMORFISMO "una interfaz, múltiples métodos".

POLIMORFISMO una interfaz, múltiples métodos. "una interfaz, múltiples métodos". 20/02/2007 Polimorfismo 2 Indice Definición y caracteristicas Objetivos. SOBRRESCRITURA-SOBRECARGA SOBRECARGA Clases y métodos abstractos INTERFACES (herencia múltiple)

Más detalles

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011 EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011 1. (0,75 PUNTOS) Identificad a continuación las sentencias que son ciertas, descartando

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos

Más detalles

www.aprendoencasa.com Curso Introducción JAVA Pág.: 1

www.aprendoencasa.com Curso Introducción JAVA Pág.: 1 www.aprendoencasa.com Curso Introducción JAVA Pág.: 1 Introducción Java es un lenguaje basado en la programación orientada a objetos (POO), este tipo de programación va más allá del tipo de programación

Más detalles

Lenguajes de Programación Curso 04-05. Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces 1. 2. Clases abstractas 2

Lenguajes de Programación Curso 04-05. Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces 1. 2. Clases abstractas 2 Objetivos Herencia. Utilización de interfaces y clases abstractas. Índice 1. Interfaces 1 2. Clases abstractas 2 3. Collections Framework 3 3.1. Collection........................................... 3

Más detalles

Introducción a la Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos Introducción a la Programación Orientada a Objetos El paradigma imperativo. En un programa se tienen una serie de variables con las cuales operamos y modificamos mediante sentencias y funciones para producir

Más detalles

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida } REUTILIZACIÓN DE CLASES:MODELO DE HERENCIA EN JAVA Java soporta herencia simple pero no múltiple. Lo hace mediante el mecanismo de extensión de clase. A partir de él, una subclase se extiende (hereda)

Más detalles

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1. Partes de un programa en Java A. Ejemplo de un Programa en Java /* class Ejemplo1 { //comienza la clase Ejemplo1. public static void main(string[] args) { // comienza el método main. JFrame miventana;

Más detalles

Introducción a la programación con C#.

Introducción a la programación con C#. Introducción a la programación con C#. El programa básico, Hola Mundo. El siguiente programa es la versión C# que muestra la cadena Hola Mundo por consola. // Programa C# que muestra Hola Mundo por consola.

Más detalles

Programación orientada a objetos

Programación orientada a objetos Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Clase! Objeto! Atributo o variable de instancia! Método! Instanciar/crear un objeto!

Más detalles

Universidad de Cantabria corcuerp@unican.es

Universidad de Cantabria corcuerp@unican.es Herencia Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Objetivos Aprender los conceptos de herencia Comprender la forma de derivar una

Más detalles

Repaso de las características más importantes de la programación Java y su adaptación a Android

Repaso de las características más importantes de la programación Java y su adaptación a Android Repaso de las características más importantes de la programación Java y su adaptación a Android 1. Entorno de programación en java 2. Variables y tipos de datos 3. Operaciones y operadores 4. Clases y

Más detalles

Definición de clases: Herencia, polimorfismo, ligadura dinámica

Definición de clases: Herencia, polimorfismo, ligadura dinámica Tema 7 Definición de clases: Herencia, polimorfismo, ligadura dinámica Con alguna frecuencia es necesario definir clases de objetos entre las cuales hay elementos comunes. En una aplicación en la cual

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez Encapsulamiento: Control de Acceso Clases en Java (1) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO En Java se organizan las clases en paquetes

Más detalles

2. Estructura de un programa en Java

2. Estructura de un programa en Java 24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador

Más detalles

Ejercicios de evaluación de fundamentos de programación en Java

Ejercicios de evaluación de fundamentos de programación en Java Ejercicios de evaluación de fundamentos de programación en Java Jorge Martínez Ladrón de Guevara Editorial EME ISBN 978-84-96285-40-8 Contenido 1. Introducción a Java... 1 Test de evaluación...1 Ejercicios...4

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

Programación Orientada a Objetos en Java

Programación Orientada a Objetos en Java Programación Orientada a Objetos en Java Curso 2006-2007 Tema 3 Clases y Objetos Gonzalo Méndez Pozo Dpto. de Ingeniería de Software e Inteligencia Artificial Universidad Complutense de Madrid Clases y

Más detalles

9. Objetos y clases. 9.1. Clases

9. Objetos y clases. 9.1. Clases Programación orientada a objetos con Java 103 9. Objetos y clases Objetivos: a) Presentar el concepto de objeto, clase, atributo, método e instancia b) Interpretar el código fuente de una aplicación Java

Más detalles

2.2.- Paradigmas de la POO

2.2.- Paradigmas de la POO 2.2.- Paradigmas de la POO Los principios propios de la orientación a objetos son: 2.2.1.- Abstracción de Datos 2.2.2.- Encapsulamiento 2.2.3.- Ocultamiento 2.2.4.- Herencia 2.2.5.- Polimorfismo Cualquier

Más detalles

Programación Orientada a Objetos en Java

Programación Orientada a Objetos en Java Programación Orientada a Objetos en Java Curso 2006-2007 Tema 4 Herencia y Polimorfismo Gonzalo Méndez Pozo Dpto. de Ingeniería de Software e Inteligencia Artificial Universidad Complutense de Madrid Herencia

Más detalles

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases PHP y MySQL Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases Herencia de Objetos La herencia permite crear muchas clases que son similares entre si, sin tener

Más detalles

Programación en Java. Programación en OO

Programación en Java. Programación en OO Programación en OO Lección 4:Programación en OO 1. Herencia 2. Modificadores de Acceso 3. Interfaces Herencia Es la acción en la que una clase obtiene los métodos y propiedades definidos en otra clase,

Más detalles

ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 7 Herencia y Composición en POO

ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 7 Herencia y Composición en POO ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 7 Herencia y Composición en POO Contenido Introducción... 1 Concepto de la Herencia... 2 Relación de

Más detalles

Modelo de Objetos Distribuidos

Modelo de Objetos Distribuidos Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo

Más detalles

Introducción al lenguaje Java

Introducción al lenguaje Java Tipo de entrega: Fecha límite: Lugar: Introducción al lenguaje Java por grupos de prácticas sesión de laboratorio Atenea Objetivos de la práctica: Escribir aplicaciones simples en Java Utilizar el entorno

Más detalles

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B) APRENDERAPROGRAMAR.COM INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha revisión:

Más detalles

Clase adicional 3. Métodos. Temas

Clase adicional 3. Métodos. Temas Clase adicional 3 Temas Métodos o Definir un método o Llamar a un método o Llamada por valor o Constructores o Método static Arrays Vectores Problemas de la clase adicional Problemas de diseño Métodos

Más detalles

Práctica 4: Herencia. Objetivos:

Práctica 4: Herencia. Objetivos: Práctica 4: Herencia Objetivos: Como se implementa la herencia en Java (superclase - clase descendiente). Utilizar super. Redefinición de métodos Clase Object Clase System Clases abstractas 1. Herencia.

Más detalles

Introducción al lenguaje JAVA

Introducción al lenguaje JAVA Universidad Autónoma de Tlaxcala Introducción al lenguaje JAVA M.C.. José Juan Hernández ndez Mora Segunda Sesión 1. Arreglos 2. Matrices 3. Clases en Java 4. Clases de Usuario en Java 5. Objetos definidos

Más detalles

Java en 2 horas. Rodrigo Santamaría

Java en 2 horas. Rodrigo Santamaría + Java en 2 horas Rodrigo Santamaría + Generalidades 2 Desarrollado por Sun en 1995 Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas a bytecode Gestión

Más detalles

Curso de Python Inicial

Curso de Python Inicial Logo IAA-CSIC Curso organizado por el Gabinete de Formación del CSIC Curso de Python Inicial Clases Contenidos 1. Paradigmas de la Programación 2. Programación Orientada a objetos 3. Clases 4. Objetos

Más detalles

D é c i m o n o v e n a S e s i ó n. Metodologías y Técnicas de Programación II C++ Herencia III

D é c i m o n o v e n a S e s i ó n. Metodologías y Técnicas de Programación II C++ Herencia III D é c i m o n o v e n a S e s i ó n Metodologías y Técnicas de Programación II Programación Orientada a Objeto (POO) C++ Herencia III 1 E s t a d o d e l P r o g r a m a Introducción a la POO Historia

Más detalles

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación

Más detalles

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System. CICLO: 01/2010 Universidad Don Bosco Materia: Lenguaje de Programación III Contenido: 1-Lectura de Datos de entrada. 2-Introduccion a JOPTIONPANE. 3-Estructuras de Control. ->LECTURA DE DATOS DE ENTRADA

Más detalles

RESPUESTA Sí, una clase puede manejar objetos. Aunque esta frase es bastante ambigua, apréndetela de memoria para el examen y no le des más vueltas.

RESPUESTA Sí, una clase puede manejar objetos. Aunque esta frase es bastante ambigua, apréndetela de memoria para el examen y no le des más vueltas. 1. PREGUNTA: Una clase puede manejar objetos? RESPUESTA Sí, una clase puede manejar objetos. Aunque esta frase es bastante ambigua, apréndetela de memoria para el examen y no le des más vueltas. 2. PREGUNTA:

Más detalles

15. Parámetros o argumentos

15. Parámetros o argumentos Programación orientada a objetos con Java 161 15. Parámetros o argumentos Objetivos: a) Profundizar en el concepto de parámetro de una clase e indicar su mecanismo de funcionamiento. b) Interpretar el

Más detalles

El lenguaje de programación Java

El lenguaje de programación Java Departament d Arquitectura de Computadors El lenguaje de programación Java Java (I) Orientado a objetos Ejecutado por una maquina virtual Independiente de la plataforma Multithreaded Orientado a la red

Más detalles

1 HILOS (THREADS) EN JAVA

1 HILOS (THREADS) EN JAVA 1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los

Más detalles

Tema 2. El lenguaje de programación Java (Parte 1)

Tema 2. El lenguaje de programación Java (Parte 1) Programación en Java Tema 2. El lenguaje de programación Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Elementos del lenguaje (I) El juego de caracteres. No utiliza ASCII, sino Unicode de

Más detalles

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría Java en 3 horas Ampliación de Sistemas Operativos Rodrigo Santamaría Generalidades Desarrollado por Sun Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

Tema: Sobrecarga de Operadores.

Tema: Sobrecarga de Operadores. Programación II. Guía 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Sobrecarga de Operadores. Objetivos Describir como redefinir (sobrecargar) operadores para que funcionen

Más detalles

Dentro del.net los eventos se utilizan para notificar a nuestros objetos que se ha producido algún tipo de hecho al que nos hemos suscrito.

Dentro del.net los eventos se utilizan para notificar a nuestros objetos que se ha producido algún tipo de hecho al que nos hemos suscrito. Eventos ala.net Recientemente ha surgido en los grupos de C# una duda sobre si los eventos que usa el.net son del mismo tipo que los que nosotros podemos crear y usar. La respuesta obvia y evidente es

Más detalles

Refactorizar (v) Reestructurar el software aplicando una secuencia de refactorizaciones.

Refactorizar (v) Reestructurar el software aplicando una secuencia de refactorizaciones. Refactorización Definición Refactorización (n) Cambio realizado a la estructura interna del software para hacerlo más fácil de comprender y más fácil de modificar sin cambiar su comportamiento observable.

Más detalles

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas Departamento de Informática PROGRAMACIÓN DIDÁCTICA Curso 11-12 1 CONSEJERÍA DE EDUCACIÓN I.E.S. NERVIÓN Departamento de Informática CICLO FORMATIVO: TÉCNICO SUPERIOR EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA.

Más detalles

Prácticas de Programación

Prácticas de Programación Prácticas de Programación Tema 1. Introducción al análisis y diseño de programas Tema 2. Clases y objetos Tema 3. Herencia y Polimorfismo Tema 4. Tratamiento de errores Tema 5. Aspectos avanzados de los

Más detalles

b c b c b b a a c a a c b c c b b c b c d c c c b

b c b c b b a a c a a c b c c b b c b c d c c c b INSTRUCCIONES: El EXAMEN TEÓRICO se divide en dos parciales. El PRIMER PARCIAL corresponde a las unidades 1 a 5. El SEGUNDO PARCIAL corresponde a las unidades 6 a 9. Aquellos alumnos que aprobaron el examen

Más detalles

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS GUIA PROGRAMACIÓN ORIENTADA A OBJETOS 1. Por qué la P.O.O? R= A medida que se van desarrollando los lenguajes, se va desarrollando también la posibilidad de resolver problemas más complejos. En la evolución

Más detalles

Herencia. 3.- Herencia. Declaración de una clase derivada en Delphi. Jerarquía de clases

Herencia. 3.- Herencia. Declaración de una clase derivada en Delphi. Jerarquía de clases Herencia 3.- Herencia La herencia nos permite definir datos y métodos que son generales (comunes a distintas clases) por separado de las que son particulares a cada clase. Esto se logra definiendo lo que

Más detalles

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:... Cuadernillo de examen ASIGNATURA Laboratorio de Sistemas Operativos Abiertos (Java) CÓDIGO 321 CONVOCATORIA Extraordinaria de Septiembre de 2003 PLAN DE ESTUDIOS 1996 ESPECIALIDAD Sistemas CURSO 2002/2003

Más detalles

Pruebas de unidad con JUnit

Pruebas de unidad con JUnit Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro

Más detalles

PROYECTO FIGURAS DIAGRAMA DE FLUJO

PROYECTO FIGURAS DIAGRAMA DE FLUJO FIGURAS JAVA ~ 1 ~ PROYECTO FIGURAS 1. Crear una clase Figura, abstracta 2. Añadirle los métodos vacíos a. CalcularPerimetro() public Devolver double b. Calcular() public Devolver double 3. Crear la clase

Más detalles

INDICE. 2.2. Uso de la composición (I). Preservación de la ocultación... 11. 3.3. Utilización de miembros heredados (I). Atributos...

INDICE. 2.2. Uso de la composición (I). Preservación de la ocultación... 11. 3.3. Utilización de miembros heredados (I). Atributos... TEMA 9 INDICE 1. Relaciones entre clases.... 4 1.1. Composición... 5 1.2. Herencia... 6 1.3. Herencia o composición?... 7 2 Composición... 9 2.1. Sintaxis de la composición.... 9 Ejercicio resuelto...

Más detalles

Arquitectura y Lenguaje Java

Arquitectura y Lenguaje Java Arquitectura y Lenguaje Java 1 Introducción El lenguaje de programación Java así como su arquitectura se diseñaron para resolver problemas que se presentan en la programación moderna. Se inició como parte

Más detalles

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO INTRODUCCIÓN Objetivo del curso: El alumno desarrollará la capacidad para resolver problemas de almacenamiento, recuperación y ordenamiento de datos, utilizando las diferentes estructuras que existen para

Más detalles

CONTENIDO. Programación orientada a objetos - POO. Clases. Constructores y destructores. Definiciones. Entrada y salida

CONTENIDO. Programación orientada a objetos - POO. Clases. Constructores y destructores. Definiciones. Entrada y salida INFORMÁTICA II 1 CONTENIDO 2 1 Programación orientada a objetos - POO 2 Clases 3 Constructores y destructores 4 Definiciones 5 Entrada y salida PROGRAMACIÓN ORIENTADA A OBJETOS Los lenguajes de programación

Más detalles

Tema 1. Introducción a los TAD

Tema 1. Introducción a los TAD Tema 1. Introducción a los TAD Objetivos En este tema nos ocupamos inicialmente del concepto de abstracción, dedicando la mayor atención a la abstracción de datos, estudiando aspectos relacionados con

Más detalles

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos Tema 3: Genericidad en Java Tema 3: Genericidad en Java Germán Moltó Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica de Valencia Índice general: 1. Definición y Ventajas de la

Más detalles

1.00 Clase 8. Datos y métodos estáticos. Datos y métodos estáticos de las clases. Campos de datos estáticos:

1.00 Clase 8. Datos y métodos estáticos. Datos y métodos estáticos de las clases. Campos de datos estáticos: 1.00 Clase 8 Datos y métodos estáticos Datos y métodos estáticos de las clases Campos de datos estáticos: Sólo una instancia de elemento de datos para toda una clase. Ninguna por objeto. Estático es un

Más detalles

Programación Concurrente y de Tiempo Real Guión de Prácticas 3: Reutilización de Clases: Modelo de Herencia en Java

Programación Concurrente y de Tiempo Real Guión de Prácticas 3: Reutilización de Clases: Modelo de Herencia en Java Programación Concurrente y de Tiempo Real Guión de Prácticas 3: Reutilización de Clases: Modelo de Herencia en Java Natalia Partera Jaime Alumna colaboradora de la asignatura Índice 1. Herencia en la Programación

Más detalles

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS 4.1 Antecedentes históricos El lenguaje de programación BASIC (Beginner's All purpose Symbolic Instruction Code)

Más detalles

Tema 3 Elementos básicos de programación

Tema 3 Elementos básicos de programación Representación de Datos y Aplicaciones Tema 3 Elementos básicos de programación Natividad Martínez Madrid nati@it.uc3m.es Objetivos del tema 3 Conocer la estructura básica de un programa Java Comprender

Más detalles

(volver a Tabla de Contenidos)

(volver a Tabla de Contenidos) Para escribir, compilar y ejecutar un programa en Java lo único que realmente se necesita y no viene incluido con el sistema operativo es el kit de desarrollo de Java, denominado SDK (Software Development

Más detalles

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java. Práctica 3 mtp metodoloxía e tecnoloxía da programación Objetivos: Duración: Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java. 1 semana 1.- Identificadores Los identificadores

Más detalles

Orientación a Objetos en Java

Orientación a Objetos en Java Orientación a Objetos en Java I. Programación Basada en objetos II. Programación orientada a objetos M. Carmen Fernández Panadero Raquel M. Crespo García Contenidos Polimorfismo

Más detalles

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad Complutense

Más detalles

Introducción - por qué usarlas?(1)

Introducción - por qué usarlas?(1) Excepciones en Java Introducción - por qué usarlas?(1) En el mundo de la programación hay algo que siempre ocurre: los errores en los programas. Pero qué sucede realmente después de que ha ocurrido el

Más detalles

PROGRAMACION ORIENTADA A OBJETOS CON PHP

PROGRAMACION ORIENTADA A OBJETOS CON PHP PROGRAMACION ORIENTADA A OBJETOS CON PHP COMO SE DEFINE EN PHP La programación orientada a objetos es una metodología de programación avanzada y bastante extendida, en la que los sistemas se modelan creando

Más detalles

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA ARREGLOS EN JAVA I I N T R O D U C C I Ó N En las sesiones anteriores, los datos manejados en los programas han sido datos simples (carácter, entero, reales) En un gran número de problemas es necesario

Más detalles

Programación Orientada a Objetos en C#.NET CAPÍTULO 5 H E R E N C I A. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu.

Programación Orientada a Objetos en C#.NET CAPÍTULO 5 H E R E N C I A. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu. CAPÍTULO 5 H E R E N C I A 2 http://www.itnuevolaredo.edu.mx/takeyas 1 Preguntas detonadoras Qué ventajas ofrece la herencia a un programador? Cuál es la diferencia entre herencia simple y herencia múltiple?

Más detalles

Tema: Herencia Simple y Múltiple en C++.

Tema: Herencia Simple y Múltiple en C++. Programación II. Guía 9 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Herencia Simple y Múltiple en C++. Objetivos Específicos Crear clases a través de la herencia de clases

Más detalles

2.1. Introducción al lenguaje Java

2.1. Introducción al lenguaje Java Bloque II. Elementos del lenguaje de programación Java 1.Introducción a los lenguajes de programación 2. Estructura de un programa 3. Datos y expresiones simples 4. Instrucciones de control 5. Entrada/salida

Más detalles

CONCEPTOS FUNDAMENTALES DE LA ORIENTACION A OBJETOS

CONCEPTOS FUNDAMENTALES DE LA ORIENTACION A OBJETOS CAPITULO 3 CONCEPTOS FUNDAMENTALES DE LA ORIENTACION A OBJETOS 3.1. QUE ES LA PROGRAMACIÓN ORIENTADA A OBJETOS? La POO no es un lenguaje de programación. La POO es una nueva manera de "atacar" los problemas

Más detalles

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Máquina Expendedora (3.5 ptos.)... 1 1.2 Ejercicio 2: Clase Circulo (1.0 pto.)... 3 1.3 Ejercicio

Más detalles

Analizar, diseñar, desarrollar e implementar soluciones orientadas a objetos utilizando encapsulamiento, herencia, polimorfismo y archivos.

Analizar, diseñar, desarrollar e implementar soluciones orientadas a objetos utilizando encapsulamiento, herencia, polimorfismo y archivos. Nombre de la asignatura: Programación Orientada a Objetos Créditos: 2-3- 5 Aportación al perfil Desarrollar, implementar y administrar software de sistemas o de aplicación que cumpla con los estándares

Más detalles

Clases abstractas e interfaces

Clases abstractas e interfaces Clases abstractas e interfaces Clases abstractas Una clase abstracta es una clase que no se puede instanciar se usa únicamente para definir subclases Cuándo es una clase abstracta? En cuanto uno de sus

Más detalles

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Dpto. de Ingeniería de Sistemas Telemáticos E.T.S.I. Telecomunicación Universidad Politécnica de Madrid FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Normas de examen: Con libros y apuntes Duración: 2 horas

Más detalles

1. Aplicaciones del J2SE SDK1.4.2 de Sun.

1. Aplicaciones del J2SE SDK1.4.2 de Sun. Dept Informatica Índice 1 Aplicaciones del J2SE SDK142 de Sun 1 11 javac 1 12 java 1 13 javadoc 2 14 Las que no se explican 3 2 Guía de estilo de Java 3 21 Clases 3 211 Nombres para las clases 3 212 Estructura

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Capítulo 10. Subtipos y Herencia.

Capítulo 10. Subtipos y Herencia. Capítulo 10. Subtipos y Herencia. Lenguajes de Programación Carlos Ureña Almagro Dpt. Lenguajes y Sistemas Informáticos ETSI Informática y de Telecomunicación Universidad de Granada Curso 2009-10 Autor:

Más detalles

Programación en Java. Hola Jesus. Primera clase del curso de Java

Programación en Java. Hola Jesus. Primera clase del curso de Java Programación en Java Un programa o aplicación Java se compone de un conjunto de clases que contienen variables de diversos tipos utilizadas para almacenar datos, y métodos que implementan código capaz

Más detalles

Objetivo de aprendizaje del tema

Objetivo de aprendizaje del tema Computación II Tema 3. Identificadores, palabras clave y tipos de datos Objetivo de aprendizaje del tema Al finalizar el tema serás capaz de: Distinguir i entre modificadores d válidos y no válidos. Enumerar

Más detalles

1. Qué tipos de relación hay entre las siguientes clases?

1. Qué tipos de relación hay entre las siguientes clases? Ejercicios Tema 8: Herencia 1. Qué tipos de relación hay entre las siguientes clases? Personal de la Universidad PAS Profesor 1 n Estudiante a) herencia y asociación b) herencia y dependencia c) dependencia

Más detalles

Programación Orientada a Objetos

Programación Orientada a Objetos CEET - Distrito Capital Programa de Formación: ADSI 150752 TRIMESTRE VI Conocimiento de Conocimiento: Aplicar diversos estilos de Programación usando herramientas para Desarrollo Web Instructor: Ing. Espec.

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4 Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4 by S. Muñoz-Gutiérrez stalinmunoz@yahoo.com, informes@grupolinda.org Grupo LINDA Facultad de Ingeniería UNAM México Octubre-Diciembre 2009 Identificando

Más detalles

Microsoft Visual Basic.NET

Microsoft Visual Basic.NET Microsoft Visual Basic.NET Curso de desarrollo de aplicaciones utilizando la tecnología de programación Microsoft.NET. El lenguaje utilizado es Visual Basic.NET, cuyas particularidades se estudian en la

Más detalles

Tema 2. Técnicas básicas de POO. Técnicas de Programación - Curso 2007/08

Tema 2. Técnicas básicas de POO. Técnicas de Programación - Curso 2007/08 Tema 2 Técnicas básicas de POO Técnicas de Programación - Curso 2007/08 Contenido Principios de POO Encapsulación Herencia Polimorfismo Ejemplos Técnicas básicas Delegación Uso de interfaces Interfaces

Más detalles

Tema 5: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle

Tema 5: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle Tema 5: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle Contenido Introducción Clases y Objetos en C++: Módulos: Clases, estructuras y espacios

Más detalles

1. Manejo de memoria estática 2. Manejo de memoria dinámica

1. Manejo de memoria estática 2. Manejo de memoria dinámica 1. Manejo de memoria estática 2. Manejo de memoria dinámica *La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. *El sistema operativo

Más detalles