tema 5 poo con c#

78
Tema Tema 5: Orientaci Orientaci ó ó n a Objetos n a Objetos con con C# C# Pro g ramación co n C# .NET

Upload: wiston-perez-narvaez

Post on 16-Oct-2015

25 views

Category:

Documents


0 download

DESCRIPTION

Programacion Orientada a Objetos en C#

TRANSCRIPT

  • Tema Tema 55::OrientaciOrientacin a Objetosn a Objetos

    con con C#C#

    Programacin con C#.NET

  • C#C#

    El lenguaje C# y la orientaciEl lenguaje C# y la orientacin a n a objetosobjetos

    Hola, mundo de nuevo Definicin de clases simples Instancias de nuevos objetos Uso del operador this

  • C#C#

    Hola, mundoHola, mundo de nuevode nuevo

    using System;

    class Hello{

    public static int Main( ){

    Console.WriteLine(Hello, World);return 0;

    }}

    using System;

    class Hello{

    public static int Main( ){

    Console.WriteLine(Hello, World);return 0;

    }}

  • C#C#

    DefiniciDefinicin de clases simplesn de clases simples Datos y mtodos juntos dentro de una clase Los mtodos son pblicos, los datos son privados

    class CuentaBancaria{

    public void Retirar(decimal cantidad){ ... }public void Ingresar(decimal cantidad){ ... }private decimal balance;private string name;

    }

    class CuentaBancaria{

    public void Retirar(decimal cantidad){ ... }public void Ingresar(decimal cantidad){ ... }private decimal balance;private string name;

    }

    Mtodos pblicosdescriben un

    comportamientoaccesible

    Mtodos pblicosdescriben un

    comportamientoaccesible

    Campos privadosdescriben un

    estadoinaccesible

    Campos privadosdescriben un

    estadoinaccesible

  • C#C#

    Instancias de nuevos objetosInstancias de nuevos objetos Al declarar una variable de clase no se crea un objeto Para crear un objeto se usa el operador new

    class Program{

    static void Main( ){

    Reloj ahora;ahora.hora = 11; Cuenta Bancaria suya = new CuentaBancaria( );suya.Ingresar(999999M);

    }}

    class Program{

    static void Main( ){

    Reloj ahora;ahora.hora = 11; Cuenta Bancaria suya = new CuentaBancaria( );suya.Ingresar(999999M);

    }}

    horaminuto

    ahora

    suya ......

    nuevoobjetoCuentaBancaria

  • C#C#

    Uso de la palabra reservada Uso de la palabra reservada thisthis La palabra reservada this apunta al objeto usado para la

    llamada al mtodo Es til en caso de conflicto entre identificadores de

    distintos mbitos

    class CuentaBancaria{

    ...public void PoneNombre(string nombre){

    this.nombre = nombre;}private string nombre;

    }

    class CuentaBancaria{

    ...public void PoneNombre(string nombre){

    this.nombre = nombre;}private string nombre;

    }

    Si esta instruccin fueranombre = nombre;qu ocurrira?

  • C#C#

    DefiniciDefinicin de sistemas orientados n de sistemas orientados a objetosa objetos

    Herencia Jerarquas de clases Herencia sencilla y mltiple Polimorfismo Clases base abstractas Interfaces

  • C#C#

    HerenciaHerencia

    La herencia indica una relacin es un tipo de" La herencia es una relacin entre clases Las nuevas clases aaden especializacin a las existentes

    MsicoMsico

    ViolinistaViolinista

    Clase base

    Clase derivada

    Generalizacin

    Especializacin Es ste un buenejemplo de herencia ?

  • C#C#

    JerarquJerarquas de clasesas de clases Las clases con relaciones de herencia forman jerarquas de

    clases

    MsicoMsico

    ??????

    Msico decuerda

    Msico decuerda

    ViolnVioln??????

    Instrumentomusical

    Instrumentomusical

    toca

    toca

    tocaViolinistaViolinista

    Instrumento decuerda

    Instrumento decuerda

  • C#C#

    Herencia sencilla y mHerencia sencilla y mltipleltiple Herencia sencilla: derivadas de una clase base Herencia mltiple: derivadas de dos o ms clases base

    Instrumento decuerda

    Instrumento decuerda

    ViolnVioln

    Instrumentomusical

    Instrumentomusical

    Instrumento decuerda

    Instrumento decuerda

    Con teclasCon teclas

    Violn tiene una sola clase base directa

    Instrumento de cuerda tiene dos clases base directas

  • C#C#

    PolimorfismoPolimorfismo El nombre del mtodo reside en la clase base Los distintos cuerpos del mtodo residen en las

    clases derivadas

    Msico de cuerdaMsico de cuerda

    AfinaTuInstrumento( )AfinaTuInstrumento( )

    GuitarristaGuitarrista

    AfinaTuInstrumento( )AfinaTuInstrumento( )

    ViolinistaViolinista

    AfinaTuInstrumento( )AfinaTuInstrumento( )

    Un mtodo sincuerpo se llama

    operacin

    Un mtodo sincuerpo se llama

    operacin

  • C#C#

    Clases base abstractasClases base abstractas Algunas clases existen slo para ser clases base No tiene sentido crear instancias de estas clases Estas clases son abstractas

    Msico de cuerda{ abstract }

    Msico de cuerda{ abstract }

    Guitarrista concrete Guitarrista

    concrete Violinista

    concrete Violinista

    concrete

    Se pueden crear instanciasde clases concretas

    Se pueden crear instanciasde clases concretas

    No se pueden crear instanciasde clases abstractas

    No se pueden crear instanciasde clases abstractas

  • C#C#

    InterfacesInterfaces Las interfaces contienen slo operaciones, no

    implementacin

    Msico de cuerda{ abstract }

    Msico de cuerda{ abstract }

    Violinista concrete Violinista

    concrete

    Msico interface

    Msico interface

    Nada ms que operaciones.No se pueden crear instancias

    de una interfaz.

    Nada ms que operaciones.No se pueden crear instancias

    de una interfaz.

    Puede contener implementacin.No se pueden crear instancias de

    una interfaz.

    Puede contener implementacin.No se pueden crear instancias de

    una interfaz.

    Implementa las operaciones heredadas.Se pueden crear instancias de una clase

    concreta.

    Implementa las operaciones heredadas.Se pueden crear instancias de una clase

    concreta.

  • C#C#

    Uso deUso de variables de variables de tipo referenciatipo referencia

  • C#C#

    Notas generalesNotas generales

    Uso de variables de tipo referencia Uso de tipos referencia comunes La jerarqua de objetos Espacios de nombres en .NET

    Framework

  • C#C#

    Uso de variables de tipo Uso de variables de tipo referenciareferencia Comparacin de tipos valor y tipos referencia Declaracin y liberacin de variables referencia Referencias no vlidas Comparacin de valores y comparacin de

    referencias Referencias mltiples a un mismo objeto Uso de referencias como parmetros de

    mtodos

  • C#C#

    ComparaciComparacin de tipos valor y tipos referencian de tipos valor y tipos referencia

    Tipos valor La variable

    contiene el valor directamente

    Ejemplos: char, int

    4242

    int mol;mol = 42;

    int mol;mol = 42;

    string mol;mol = Hola";

    string mol;mol = Hola";

    HolaHola

    Tipos referenciaz La variable contiene una

    referencia al datoz El dato se almacena en un

    rea de memoria aparte

  • C#C#

    DeclaraciDeclaracin y liberacin y liberacin de variables referencian de variables referencia

    Declaracin de variables referencia

    coordenada c1; c1 = new coordinate(); c1.x = 6.12; c1.y = 4.2;

    coordenada c1; c1 = new coordinate(); c1.x = 6.12; c1.y = 4.2;

    6.126.12 4.24.2

    c1 = null;c1 = null;

    6.126.12 4.24.2

    Liberacin de variables referencia

  • C#C#

    Referencias no vReferencias no vlidaslidas

    Si hay referencias no vlidas No es posible acceder a miembros o variables

    Referencias no vlidas en tiempo de compilacin El compilador detecta el uso de referencias no

    inicializadas Referencias no vlidas en tiempo de ejecucin

    El sistema generar un error de excepcin

  • C#C#

    ComparaciComparacin de valores y comparacin de valores y comparacin de n de referenciasreferencias

    Comparacin de tipos valor == and != comparan valores

    Comparacin de tipos referencia == and != comparan las referencias, no los valores

    1.01.0 2.02.0

    1.01.0 2.02.0Diferente

  • C#C#

    Referencias mReferencias mltiples a un mismo objetoltiples a un mismo objeto

    Dos referencias pueden apuntar a un mismo objeto Dos formas de acceder a un mismo objeto para

    lectura/escritura

    coordinate c1= new coordinate ( );coordinate c2;c1.x = 2.3; c1.y = 7.6;c2 = c1;Console.WriteLine(c1.x + " , " + c1.y);Console.WriteLine(c2.x + " , " + c2.y);

    coordinate c1= new coordinate ( );coordinate c2;c1.x = 2.3; c1.y = 7.6;c2 = c1;Console.WriteLine(c1.x + " , " + c1.y);Console.WriteLine(c2.x + " , " + c2.y);

    2.32.3 7.67.6

    c1

    c2

  • C#C#

    Uso de referencias como parUso de referencias como parmetros de mmetros de mtodostodos Las referencias se pueden usar como parmetros Si se pasan por valor, es posible cambiar el

    dato referenciado

    static void PassCoordinateByValue(coordinate c){c.x++; c.y++;

    }

    static void PassCoordinateByValue(coordinate c){c.x++; c.y++;

    }

    loc.x = 2; loc.y = 3;PassCoordinateByValue(loc);Console.WriteLine(loc.x + " , " + loc.y);

    loc.x = 2; loc.y = 3;PassCoordinateByValue(loc);Console.WriteLine(loc.x + " , " + loc.y);

    2 32 3 3 43 4

  • C#C#

    Uso de tipos referencia comunesUso de tipos referencia comunes Clase Exception Clase String Mtodos, operadores y propiedades comunes de

    String Comparaciones de cadenas de caracteres Operadores de comparacin en String

  • C#C#

    Clase Clase ExceptionException

    Exception es una clase Los objetos Exception se usan para lanzar

    excepcionesPara crear un objeto Exception se usa newPara lanzar el objeto se usa throw

    Los tipos Exception son subclases de Exception

  • C#C#

    Clase Clase StringString

    Cadenas de caracteres Unicode Abreviatura de System.String Inmutable

    string s = "Hola";

    s[0] = 'c'; // Error al compilar

    string s = "Hola";

    s[0] = 'c'; // Error al compilar

  • C#C#

    MMtodos, operadores y propiedades comunes todos, operadores y propiedades comunes de de StringString

    Corchetes Mtodo Insert Propiedad Length Mtodo Copy Mtodo Concat Mtodo Trim Mtodos ToUpper y ToLower

  • C#C#

    Comparaciones de cadenas de Comparaciones de cadenas de caracterescaracteres Mtodo EqualsComparacin de valores

    Mtodo CompareMs comparacionesOpcin para no distinguir maysculas y

    minsculasOrdenacin alfabtica

    Opciones locales de Compare

  • C#C#

    Operadores de comparaciOperadores de comparacin en n en StringString

    Los operadores == y != estn sobrecargados para cadenas

    Son equivalentes a String.Equals y !String.Equals

    string a = "Test";string b = "Test";if (a == b) ... // Devuelve true

    string a = "Test";string b = "Test";if (a == b) ... // Devuelve true

  • C#C#

    La jerarquLa jerarqua de objetosa de objetos

    El tipo object Mtodos comunes Reflexin

  • C#C#

    El tipo El tipo objectobject

    Sinnimo de System.Object Clase base para todas las dems clases

    ExceptionException

    SystemExceptionSystemException

    MyClassMyClass

    ObjectObject

    StringString

  • C#C#

    MMtodos comunestodos comunes

    Mtodos comunes para todos los tipos referenciaMtodo ToStringMtodo EqualsMtodo GetTypeMtodo Finalize

  • C#C#

    ReflexiReflexinn

    Es posible obtener informacin sobre el tipo de un objeto

    Espacio de nombres System.Reflection El operador typeof devuelve el tipo de un objeto Slo para clases en tiempo de compilacin

    Mtodo GetType en System.Object Informacin sobre clases en tiempo de

    ejecucin

  • C#C#

    Conversiones de datosConversiones de datos Conversin de tipos valor Conversiones padre/hija El operador is El operador as Conversiones y el tipo object Conversiones e interfaces Boxing y unboxing

  • C#C#

    ConversiConversin de tipos valorn de tipos valor

    Conversiones implcitas Conversiones explcitasOperador de cast

    Excepciones Clase System.ConvertControl interno de conversiones

  • C#C#

    Conversiones padre/hijaConversiones padre/hija

    Conversin a referencia de clase padreImplcita o explcitaSiempre tiene xitoSiempre se puede asignar a un objeto

    Conversin a referencia de clase hijaEs necesario cast explcitoComprueba que la referencia es del tipo

    correctoSi no lo es, causa una excepcin

    InvalidCastException

  • C#C#

    El operador El operador isis

    Devuelve true si es posible realizar una conversin

    Pajaro b;if (a is Pajaro)

    b = (Pajaro) a; // No hay problemaelse

    Console.WriteLine("No es Pjaro");

    Pajaro b;if (a is Pajaro)

    b = (Pajaro) a; // No hay problemaelse

    Console.WriteLine("No es Pjaro");

  • C#C#

    El operador asEl operador as Hace conversiones entre tipos referencia, como cast En caso de error Devuelve null No causa una excepcin

    Pajaro b = a as Pajaro; // Convertir

    if (b == null)Console.WriteLine("No es Pjaro);

    Pajaro b = a as Pajaro; // Convertir

    if (b == null)Console.WriteLine("No es Pjaro);

  • C#C#

    Conversiones y el tipo Conversiones y el tipo objectobject El tipo object es la base para todas las clases Se puede asignar a object cualquier referencia Se puede asignar cualquier variable object a cualquier

    referencia Con conversin de tipo y comprobaciones

    El tipo object y el operador is

    object buey;buey = a; buey = (object) a;buey = a as object;

    object buey;buey = a; buey = (object) a;buey = a as object;

    b = (Pajaro) buey;b = buey as Pajaro;

    b = (Pajaro) buey;b = buey as Pajaro;

  • C#C#

    Conversiones e interfacesConversiones e interfaces

    Una interfaz slo se puede usar para acceder a sus propios miembros

    No es posible acceder a otros miembros y variables de la clase a travs de la interfaz

  • C#C#

    BoxingBoxing y y unboxingunboxing Sistema de tipos unificado Boxing Unboxing Llamadas a mtodos de object en tipos valor

    int p = 123;object box;box = p;

    int p = 123;object box;box = p;

    123123

    123123 p = (int)box;p = (int)box;

  • C#C#

    CreaciCreacin yn ydestruccidestruccin de n de

    objetosobjetos

  • C#C#

    DescripciDescripcin generaln general

    Uso de constructores Objetos y memoria

  • C#C#

    Uso de constructoresUso de constructores

    Creacin de objetos Uso del constructor por defecto Sustitucin del constructor por defecto Sobrecarga de constructores

  • C#C#

    CreaciCreacin de objetosn de objetos Paso 1: Asignacin de memoria Se usa new para asignar memoria desde el montn

    Paso 2: Inicializacin del objeto usando un constructor Se usa el nombre de la clase seguido por parntesis

    Fecha cuando = new Date( );Fecha cuando = new Date( );

  • C#C#

    Uso del constructor por defectoUso del constructor por defecto Caractersticas de un constructor por defecto Acceso pblico Mismo nombre que la clase No tiene tipo de retorno (ni siquiera void) No recibe ningn argumento Inicializa todos los campos a cero, false o null

    Sintaxis del constructor

    class Date { public Date( ) { ... } }class Date { public Date( ) { ... } }

  • C#C#

    SustituciSustitucin del constructor por n del constructor por defectodefecto El constructor por defecto puede no ser

    adecuadoEn ese caso no hay que usarlo, sino escribir

    otroClass Date{

    public Date( ){

    ssaa = 1970;mm = 1;dd = 1;

    }private int ccyy, mm, dd;

    }

    Class Date{

    public Date( ){

    ssaa = 1970;mm = 1;dd = 1;

    }private int ccyy, mm, dd;

    }

  • C#C#

    Sobrecarga de constructoresSobrecarga de constructores Los constructores son mtodos y pueden estar

    sobrecargados Mismo mbito, mismo nombre, distintos parmetros Permite inicializar objetos de distintas maneras

    AVISO Si se escribe un constructor para una clase, el

    compilador no crear un constructor por defecto

    Class Date{

    public Date( ) { ... }public Date(int anno, int mes, int dia) { ... }...

    }

    Class Date{

    public Date( ) { ... }public Date(int anno, int mes, int dia) { ... }...

    }

  • C#C#

    Objetos y memoriaObjetos y memoria

    Tiempo de vida de un objeto Objetos y mbito Recoleccin de basura

  • C#C#

    Tiempo de vida de un objetoTiempo de vida de un objeto Creacin de objetosSe usa new para asignar memoriaSe usa un constructor para inicializar un

    objeto en esa memoria Uso de objetosLlamadas a mtodos

    Destruccin de objetosSe vuelve a convertir el objeto en memoriaSe libera la memoria

  • C#C#

    Objetos y Objetos y mbitombito El tiempo de vida de un valor a local est vinculado al

    mbito en el que est declarado Tiempo de vida corto (en general) Creacin y destruccin deterministas

    El tiempo de vida de un objeto dinmico no estvinculado a su mbito Tiempo de vida ms largo Destruccin no determinista

  • C#C#

    RecolecciRecoleccin de basuran de basura No es posible destruir objetos de forma explcita C# no incluye un inverso de new (como

    delete) Ello se debe a que una funcin de eliminacin

    explcita es una importante fuente de errores en otros lenguajes

    Los objetos se destruyen por recoleccin de basura Busca objetos inalcanzables y los destruye Los convierte de nuevo en memoria binaria no

    utilizada Normalmente lo hace cuando empieza a faltar

    memoria

  • C#C#

    Herencia enHerencia en C#C#

  • C#C#

    Notas generalesNotas generales

    Derivacin de clases Implementacin de mtodos Uso de clases selladas Uso de interfaces Uso de clases abstractas

  • C#C#

    DerivaciDerivacin de clasesn de clases

    Extensin de clases base Acceso a miembros de la clase base Llamadas a constructores de la clase base

  • C#C#

    ExtensiExtensin de clases basen de clases base Sintaxis para derivar una clase desde una clase

    base

    Una clase derivada hereda la mayor parte de los elementos de su clase base

    Una clase derivada no puede ser ms accesible que su clase base

    class Token{

    ...}class ComentToken: Token{

    ...}

    class Token{

    ...}class ComentToken: Token{

    ...}

    ComentToken concrete

    ComentToken concrete

    Token concrete

    Token concrete Clase derivadaClase derivadaClase derivada Clase baseClase baseClase base

    2 puntos2 puntos2 puntos

  • C#C#

    Acceso a miembros de la clase Acceso a miembros de la clase basebase

    Los miembros heredados con proteccin estn implcitamente protegidos en la clase derivada

    Los miembros de una clase derivada slo pueden acceder a sus miembros heredados con proteccin

    En una struct no se usa el modificador de acceso protected

    class Token{ ... class Outside

    protected string name; {} void Fails(Token t)class ComentToken: Token {{ ... ...

    public string Name( ) t.name{ ...

    return name; } } }

    }

    class Token{ ... class Outside

    protected string name; {} void Fails(Token t)class ComentToken: Token {{ ... ...

    public string Name( ) t.name{ ...

    return name; } } }

    }

    8899

  • C#C#

    Llamadas a constructores de la clase baseLlamadas a constructores de la clase base Las declaraciones de constructores deben usar la palabra

    base

    Una clase derivada no puede acceder a un constructor privado de la clase base

    Se usa la palabra base para habilitar el mbito del identificador

    class Token{

    protected Token(string name) { ... }...

    }class ComentToken: Token{

    public ComentToken(string name) : base(name) { } ...

    }

    class Token{

    protected Token(string name) { ... }...

    }class ComentToken: Token{

    public ComentToken(string name) : base(name) { } ...

    }

  • C#C#

    ImplementaciImplementacin de mn de mtodostodos

    Definicin de mtodos virtuales Uso de mtodos virtuales Sustitucin de mtodos (override) Uso de mtodos override Uso de new para ocultar mtodos Uso de la palabra reservada new

  • C#C#

    DefiniciDefinicin de mn de mtodos virtualestodos virtuales Sintaxis: Se declara como virtual

    Los mtodos virtuales son polimrficos

    class Token{

    ...public int LineNumber( ) { ... }public virtual string Name( ) { ... }

    }

    class Token{

    ...public int LineNumber( ) { ... }public virtual string Name( ) { ... }

    }

  • C#C#

    Uso de mUso de mtodos virtualestodos virtuales

    Para usar mtodos virtuales:No se puede declarar mtodos virtuales como

    estticosNo se puede declarar mtodos virtuales como

    privados

  • C#C#

    SustituciSustitucin de mn de mtodos (todos (overrideoverride)) Sintaxis: Se usa la palabra reservada override

    class Token{ ...

    public virtual string Name( ) { ... } }class ComentToken: Token{ ...

    public override string Name( ) { ... }}

    class Token{ ...

    public virtual string Name( ) { ... } }class ComentToken: Token{ ...

    public override string Name( ) { ... }}

  • C#C#

    Uso de mUso de mtodos todos overrideoverride Slo se sustituyen mtodos virtuales heredados idnticos

    Un mtodo override debe coincidir con su mtodo virtual asociado

    Se puede sustituir un mtodo override No se puede declarar explcitamente un override como virtual No se puede declarar un mtodo override como static o private

    class Token{ ...

    public int LineNumber( ) { ... }public virtual string Name( ) { ... }

    }class ComentToken: Token{ ...

    public override int LineNumber( ) { ... }public override string Name( ) { ... }

    }

    class Token{ ...

    public int LineNumber( ) { ... }public virtual string Name( ) { ... }

    }class ComentToken: Token{ ...

    public override int LineNumber( ) { ... }public override string Name( ) { ... }

    }

    8899

  • C#C#

    Uso de Uso de newnew para ocultar mpara ocultar mtodostodos Sintaxis: Para ocultar un mtodo se usa la

    palabra reservada new

    class Token{ ...

    public int LineNumber( ) { ... }}class ComentToken: Token{ ...

    new public int LineNumber( ) { ... }

    }

    class Token{ ...

    public int LineNumber( ) { ... }}class ComentToken: Token{ ...

    new public int LineNumber( ) { ... }

    }

  • C#C#

    Uso de la palabra reservada Uso de la palabra reservada newnew Ocultar tanto mtodos virtuales como no virtuales

    Resolver conflictos de nombre en el cdigo Ocultar mtodos que tengan signaturas idnticas

    class Token{ ...

    public int LineNumber( ) { ... }public virtual string Name( ) { ... }

    }class ComentToken: Token{ ...

    new public int LineNumber( ) { ... }public override string Name( ) { ... }

    }

    class Token{ ...

    public int LineNumber( ) { ... }public virtual string Name( ) { ... }

    }class ComentToken: Token{ ...

    new public int LineNumber( ) { ... }public override string Name( ) { ... }

    }

  • C#C#

    Uso de clases selladasUso de clases selladas Ninguna clase puede derivar de una clase sellada Las clases selladas sirven para optimizar

    operaciones en tiempo de ejecucin Muchas clases de .NET Framework son selladas:

    String, StringBuilder, etc. Sintaxis: Se usa la palabra reservada sealed

    namespace System{

    public sealed class String{

    ...}

    }namespace Mine{

    class FancyString: String { ... }}

    namespace System{

    public sealed class String{

    ...}

    }namespace Mine{

    class FancyString: String { ... }} 88

  • C#C#

    Uso de interfacesUso de interfaces

    Declaracin de interfaces Implementacin de varias interfaces Implementacin de mtodos de

    interfaz

  • C#C#

    DeclaraciDeclaracin de interfacesn de interfaces

    Sintaxis: Para declarar mtodos se usa la palabra reservada interface

    interface IToken{

    int LineNumber( );string Name( );

    }

    interface IToken{

    int LineNumber( );string Name( );

    }

    IToken interface

    IToken interface

    LineNumber( )Name( )LineNumber( )Name( )

    Mtodos sin cuerpoMMtodos sin cuerpotodos sin cuerpo

    Los nombres de interfacesempiezan con ImaysculaLos nombres de interfacesLos nombres de interfaces

    empiezan con empiezan con IImaymaysculascula

    Sin espec. de accesoSin Sin especespec. de acceso. de acceso

  • C#C#

    ImplementaciImplementacin de varias interfacesn de varias interfaces Una clase puede implementar cero o ms interfaces

    Una interfaz puede extender cero o ms interfaces Una clase puede ser ms accesible que sus interfaces base Una interfaz no puede ser ms accesible que su interfaz

    base Una clase implementa todos los mtodos de interfaz

    heredados

    interface IToken{

    string Name( );}interface IVisitable{

    void Accept(IVisitante v);}class Token: IToken, IVisitable{ ...}

    interface IToken{

    string Name( );}interface IVisitable{

    void Accept(IVisitante v);}class Token: IToken, IVisitable{ ...}

    IToken interface

    IToken interface

    IVisitable interface IVisitable

    interface

    Token concrete

    Token concrete

    CVC1

  • Diapositiva 68

    CVC1 Todas las declaraciones de mtodos deben nombrar los parmetrosCurro Vzquez; 20/04/2003

  • C#C#

    ImplementaciImplementacin de mn de mtodos de todos de interfazinterfaz El mtodo que implementa debe ser igual que el mtodo

    de interfaz El mtodo que implementa puede ser virtual o no virtual

    class Token: IToken, IVisitable{

    public virtual string Name( ) { ... } public void Accept(IVisitante v) { ... }

    }

    class Token: IToken, IVisitable{

    public virtual string Name( ) { ... } public void Accept(IVisitante v) { ... }

    }

    Mismo accesoMismo retornoMismo nombreMismos parmetros

    Mismo accesoMismo accesoMismo retornoMismo retornoMismo nombreMismo nombreMismos parMismos parmetrosmetros

  • C#C#

    Uso de clases abstractasUso de clases abstractas Declaracin de clases abstractas Uso de clases abstractas en una jerarqua de

    clases Comparacin de clases abstractas e interfaces Implementacin de mtodos abstractos Uso de mtodos abstractos

  • C#C#

    DeclaraciDeclaracin de clases abstractasn de clases abstractas Se usa la palabra reservada abstract

    abstract class Token{

    ...}class Test{

    static void Main( ){

    new Token( );}

    }

    abstract class Token{

    ...}class Test{

    static void Main( ){

    new Token( );}

    }

    Token{ abstract }Token

    { abstract }

    No se pueden crear instanciasde una clase abstracta

    No se pueden crear instanciasNo se pueden crear instanciasde una clase abstractade una clase abstracta88

  • C#C#

    Uso de clases abstractas en una jerarquUso de clases abstractas en una jerarqua de a de clasesclases

    interface IToken{

    string Name( );}

    abstract class Token: IToken{

    string IToken.Name( ) { ...}...

    }

    class ComentToken: Token{ ...}class KeywordToken: Token{ ...}

    interface IToken{

    string Name( );}

    abstract class Token: IToken{

    string IToken.Name( ) { ...}...

    }

    class ComentToken: Token{ ...}class KeywordToken: Token{ ...}

    Ejemplo 1

    Token{ abstract }Token

    { abstract }

    IToken interface

    IToken interface

    ComentToken

    concrete

    ComentToken

    concrete

    KeywordToken

    concrete

    KeywordToken

    concrete

  • C#C#

    Uso de clases abstractas en una jerarquUso de clases abstractas en una jerarqua de a de clases clases ((cont.cont.))

    interface IToken{

    string Name( );}

    abstract class Token{

    public virtual string Name( ) { ...}...

    }

    class ComentToken: Token, IToken{ ...}class KeywordToken: Token, IToken{ ...}

    interface IToken{

    string Name( );}

    abstract class Token{

    public virtual string Name( ) { ...}...

    }

    class ComentToken: Token, IToken{ ...}class KeywordToken: Token, IToken{ ...}

    Ejemplo 2

    Token{ abstract }Token

    { abstract }

    IToken interface

    IToken interface

    ComentToken

    concrete

    ComentToken

    concrete

    KeywordToken

    concrete

    KeywordToken

    concrete

  • C#C#

    ComparaciComparacin de clases abstractas e n de clases abstractas e interfacesinterfaces Parecidos No se pueden crear instancias de ninguna de ellas No se puede sellar ninguna de ellas

    Diferencias Las interfaces no pueden contener implementaciones Las interfaces no pueden declarar miembros no

    pblicos Las interfaces no pueden extender nada que no sea

    una interfaz

  • C#C#

    ImplementaciImplementacin de mn de mtodos todos abstractosabstractos Sintaxis: Se usa la palabra reservada abstract

    Slo clases abstractas pueden declarar mtodos abstractos

    Los mtodos abstractos no pueden tener cuerpo

    abstract class Token{

    public virtual string Name( ) { ... }public abstract int Longitud( );

    }class ComentToken: Token{

    public override string Name( ) { ... }public override int Longitud( ) { ... }

    }

    abstract class Token{

    public virtual string Name( ) { ... }public abstract int Longitud( );

    }class ComentToken: Token{

    public override string Name( ) { ... }public override int Longitud( ) { ... }

    }

  • C#C#

    Uso de mUso de mtodos abstractostodos abstractos Los mtodos abstractos son virtuales Los mtodos override pueden sustituir a

    mtodos abstractos en otras clases derivadas Los mtodos abstractos pueden sustituir a

    mtodos de la clase base declarados como virtuales

    Los mtodos abstractos pueden sustituir a mtodos de la clase base declarados como override

  • Bibliografa C#. Curso de Programacin. Autor: Fco. Javier Ceballos Sierra. Editorial:

    RA-MA en Espaa. Alfaomega Grupo Editor en Amrica.

    Enciclopedia de Microsoft Visual C#. Autor: Fco. Javier Ceballos Sierra. Editorial:

    RA-MA en Espaa. Alfaomega Grupo Editor en Amrica.