tema 5 poo con c#
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.