INSTITUTO TECNOLÓGICO DE TIJUANA SUBDIRECCIÓN ACADÉMICA DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN

Anuncio
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;}
}
Descargar