INSTITUTO TECNOLÓGICO DE TIJUANA SUBDIRECCIÓN ACADÉMICA DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN CARRERA: Ing. Tecnologías de la Información y Comunicaciones MATERIA Y SERIE: Programación Orientada a Objetos TITULO: Métodos UNIDAD A EVALUAR: 4 NOMBRE Y NÚMERO DE CONTROL DEL ALUMNO: Castro Hernández Rosa, 13211518 NOMBRE DEL MAESTRO: Marco Antonio Rodríguez Moreno Tijuana B.C. a 14 de noviembre del 2014 Índice Métodos Virtual Abstracto Sellados Sobrecargados Modificador de Acceso Public Private Internal Protected Internal Protected Interfaces Métodos » Virtual Un método virtual especifica una implementación de un método que puede ser sustituida por polimorfismo en una clase derivada. Del mismo modo, un método no virtual especifica la única implementación de un método. No es posible sustituir por polimorfismo un método no virtual en una clase derivada. Para usar eficazmente los métodos virtuales hay que tener en cuenta lo siguiente: • No se puede declarar métodos virtuales como estáticos. Los métodos virtuales no pueden ser estáticos porque en ese caso serían métodos de clase y el polimorfismo se aplica a objetos, no a clases. • No se puede declarar métodos virtuales como privados. Los métodos virtuales no pueden ser privados porque en ese caso no podrían ser sustituidos por polimorfismo en una clase derivada. Ejemplo: Class Persona { private string nombre; private string apellido; public Persona (string nombre, string apellido) { this.Nombre = nombre; this.Apellido = apellido; } public string Nombre { get {return nombre;} set {nombre = value;} } public string Apellido { get {return apellido;} set {apellido = value;} } public virtual void Ser () { Console.Writeline (“Soy una persona”); } } Clase Alumno Class Alumno:Persona { private string legajo; public Alumno (string nombre, string apellido, string legajo) : base (nombre, apellido) { this.Legajo = legajo; } public string Legajo { get {return legajo;} set {legajo = value;} } public override void Ser () { Console.Writeline (“Soy un alumno”); } } » Abstracto Un método abstracto consiste en la especificación de la firma en la declaración del método en cuestión. Esté deberá ser implementado por los tipos de datos heredados. Implícitamente un método abstracto es virtual (virtual) y deberá ser sobrescrito (override). Ejemplo de un método abstracto: public abstract double CalcularArea (); Tenga en cuenta que el cuerpo del método ha sido reemplazada por un punto y coma (;). El compilador generará el siguiente error si especificamos (inclusive vacío) un cuerpo de implementación para el método abstracto: error CS0500: ‘Tipo.CalcularArea()’ cannot declare a body because it is marked abstract La clase que herede de la clase abstracta que contiene el método anterior, debe seguir la siguiente regla de implementación del contrato: public override double CalcularArea () { // implementación del método abstracto } Se debe usar el modificador override para aceptar el contrato de la clase abstracta. » Sellados Cuando una declaración de método de instancia incluye un modificador sealed, se dice que el método es un método sellado. Si una declaración de método de instancia incluye el modificador sealed, también debe incluir el modificador override. El uso del modificador sealed impide que una clase derivada siga reemplazando el método. using System; class A { public virtual void F() { Console.WriteLine(“A.F”); } public virtual void G() { Console.WriteLine(“A.G”); } } class B: A { sealed override public void F() { Console.WriteLine(“B.F”); } override public void G() { Console.WriteLine(“B.G”); } } class C: B { override public void G() { Console.WriteLine(“C.G”); } } La clase B proporciona dos métodos de reemplazo: un método F que tiene el modificador sealed y un método G que no lo tiene. El uso en B del modificador sealed impide que C siga reemplazando F. » Sobrecargados La sobrecarga de métodos permite definir dos o más métodos con el mismo nombre, pero que difieren en cantidad o tipo de parámetros. Esta característica del lenguaje nos facilita la implementación de algoritmos que cumplen la misma función pero que difieren en los parámetros. Problema: Implementar dos métodos que sumen dos enteros en el primer caso y que concatenen dos string en el segundo. Ejemplo: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SobrecargaParametros1 { class Program { public int Sumar(int x1, int x2) { int s = x1 + x2; return s; } public string Sumar(string s1, string s2) { string s = s1 + s2; return s; } static void Main(string[] args) { Program p = new Program(); Console.WriteLine(“La suma de 5+10 es:” + p.Sumar(5, 10)); Console.WriteLine(“La concatenacion “+p.Sumar(“Juan”,” Carlos”)); de \”Juan\” y \” Carlos\” es Console.ReadKey(); } } } http://www.csharpya.com.ar/detalleconcepto.php?codigo=189&inicio=60 Modificador de Acceso Los modificadores de acceso son palabras clave que especifican la accesibilidad declarada de un miembro o un tipo. Esta sección presenta los cuatro modificadores de acceso: Mediante los modificadores de acceso se pueden especificar los siguientes cinco niveles de accesibilidad: public: acceso no restringido. private: acceso limitado al tipo contenedor. Internal: acceso limitado al ensamblado actual. protected: acceso limitado a la clase contenedora o a los tipos derivados de esta clase. Protected Internal: El acceso se limita al ensamblado o a tipos actuales derivados de la clase contenedora. Interfaces Las interfaces son una forma especial de una clase, aunque la diferencia principal con las clases es que las interfaces no contienen código ejecutable, solo definen los miembros y, en el caso de los métodos, si reciben parámetros y de qué tipo son. Las interfaces se utilizan para indicar el “comportamiento” que tendrá una clase, o al menos qué miembros debe definir esa clase. Para definir una interfaz en C# tenemos que usar la instrucción interface seguida del nombre y encerrado entre un par de llaves los miembros que define: public interface IAnimal { void Desplazar(); void Alimentarse(); string Especie { get; set;} int Edad { get;} }