Clase IVClase IVDelio AlanisDelio Alanis
AgendaAgenda
Conversión de tiposConversión de tipos POO y SintaxisPOO y Sintaxis
Clases, Métodos Clases, Métodos Herencia y ConstructoresHerencia y Constructores Partial ClassesPartial Classes OcultamientoOcultamiento Clases Abstractas e InterfacesClases Abstractas e Interfaces
Class DesignerClass Designer
AgendaAgenda
Conversión de tiposConversión de tipos POO y SintaxisPOO y Sintaxis
Clases, Métodos Clases, Métodos Herencia y ConstructoresHerencia y Constructores Partial ClassesPartial Classes OcultamientoOcultamiento Clases Abstractas e InterfacesClases Abstractas e Interfaces
Class DesignerClass Designer
Conversión de tiposConversión de tipos C# no permite conversiones implícitas de tiposC# no permite conversiones implícitas de tipos
Si falla el casting se devuelve null o InvalidCastExceptionSi falla el casting se devuelve null o InvalidCastException
VB.NET usa las directivas del compilador Option StrictVB.NET usa las directivas del compilador Option Strict Si falla el casting siempre se genera una InvalidCastExceptionSi falla el casting siempre se genera una InvalidCastException
Cuenta cta = new CtaCte();CtaCte cc = cta; //Error: puede que cta no sea una CtaCteCtaCte cc = (CtaCte)cta; //Conversion explicita “CASTING”CtaCte cc = cta as CtaCte; //Usando el operador “as”
if (cta is CtaCte) ... //Comp. con el operador “is”
Dim cta As Cuenta = New CtaCte()
Dim cc As CtaCte = cta ‘OK Option Strict OffDim cc As CtaCte = CType(cta, CtaCte) ‘Option Strict On
If TypeOf cta Is CtaCte Then ‘Comp. con TypeOf Is
Co
nve
rsió
n d
e ti
pos
Co
nve
rsió
n d
e ti
pos
Conversión de tiposConversión de tipos .NET ofrece métodos para realizar las converciones, por ejemplo el .NET ofrece métodos para realizar las converciones, por ejemplo el
ToString() que todos los object tienen.ToString() que todos los object tienen.
VB.NET usa las directivas del compilador Option StrictVB.NET usa las directivas del compilador Option Strict Si falla el casting siempre se genera una InvalidCastExceptionSi falla el casting siempre se genera una InvalidCastException
int numero = 10; object obj; obj = numero; //boxingnumero = (int)obj; //unboxingstring valor = numero.ToString(); //Convierte int en cadena
Dim precio As String = “100.10”Dim otroPrecio As double = Convert.ToDouble(precio)
Dim numero As Long = 1000Dim numeroDouble As Double = CType(numero, Double)
Co
nve
rsió
n d
e ti
pos
Co
nve
rsió
n d
e ti
pos
LaboratorioLaboratorio•Conversión de tipos y ExcepcionesConversión de tipos y Excepciones
AgendaAgenda
Conversión de tiposConversión de tipos POO y SintaxisPOO y Sintaxis
Clases, Métodos Clases, Métodos Herencia y ConstructoresHerencia y Constructores Partial ClassesPartial Classes OcultamientoOcultamiento Clases Abstractas e InterfacesClases Abstractas e Interfaces
Class DesignerClass Designer
EnumsEnums
C#: las estructuras se definen mediante enumC#: las estructuras se definen mediante enum
VB.NET usa enum / end enumVB.NET usa enum / end enum
//Definicion del enum diasenum Dias {lunes, martes, miercoles, jueves, viernes};
‘Definicion del enum diasenum Dias
lunes = 1martes = 2miercoles = 3jueves = 4viernes = 5
End Enum
Enum: Listas de datosEnum: Listas de datos
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
ClasesClases
C#: las clases son declaradas mediante classC#: las clases son declaradas mediante class
VB.NET usa las palabras Class / End ClassVB.NET usa las palabras Class / End Class
//Definicion de la clase CtaCteclass CtaCte{
//Definicion de miembros}
‘Definicion de la clase CtaCteClass CtaCte
‘Definicion de miembrosEnd Class
Clase: es la definición de las características de un Clase: es la definición de las características de un determinado tipo de objeto.determinado tipo de objeto.
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
ConstructoresConstructores
En C# tienen el mismo nombre de la claseEn C# tienen el mismo nombre de la clase
VB.NETVB.NET usa un procedimiento usa un procedimiento Sub NewSub New VB.NETVB.NET usa un procedimiento usa un procedimiento Sub NewSub New
class CtaCte{ public CtaCte(){...} //Const. por default public CtaCte(int i){...} //Const. con un parametro}
Class CtaCte Sub New() End Sub Sub New(ByVal i As Integer) End Sub End Class
Constructor: funciones dentro de la clase, que son Constructor: funciones dentro de la clase, que son llamadas cuando se crea una instancia de dicha llamadas cuando se crea una instancia de dicha clase.clase.
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
PropiedadesPropiedades
Propiedad: Propiedad: característica o atributo de un objetocaracterística o atributo de un objeto Propiedad: Propiedad: característica o atributo de un objetocaracterística o atributo de un objeto
C#C# C#C# VB.NETVB.NET VB.NETVB.NET
class CtaCte{ int _balance; public int Balance { get { return _balance; } set { _balance = value; } }}
CtaCte cc = new CtaCte();cc.Balance = 100; //AsignaciónMostrar(cc.Balance); //Obtención
Class CtaCte Dim _balance As Integer Property Balance() As Integer Get Return _balance End Get Set (ByVal value As Integer) _balance = value End Set End PropertyEnd Class
Dim cc As New CtaCte()cc.Balance = 100 ‘AsignaciónMostrar(cc.Balance) ‘Obtención
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
MétodosMétodos
En C# todo método es una funciónEn C# todo método es una función En C# todo método es una funciónEn C# todo método es una función
VB.NETVB.NET usa procedimientos usa procedimientos Sub Sub y funciones y funciones FunctionFunction VB.NETVB.NET usa procedimientos usa procedimientos Sub Sub y funciones y funciones FunctionFunction
public void HacerDeposito(int importe) //No devuelve valor{}
public int ObtenerInventario(int codArticulo) //Devuelve un entero{}
Public Sub HacerDeposito(ByVal importe As Integer)End Sub
Public Function Inventario(ByVal codArt As Integer) As IntegerEnd Function
Métodos:Métodos: acciones que un objeto puede llevar a cabo. acciones que un objeto puede llevar a cabo. Métodos:Métodos: acciones que un objeto puede llevar a cabo. acciones que un objeto puede llevar a cabo.
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Sobrecarga de MétodosSobrecarga de Métodos
C#C# C#C#
VB.NETVB.NET VB.NETVB.NET
public void HacerDeposito(int importe) {}
public void HacerDeposito(int importe, bool acreditar){}
Public Sub HacerDeposito(ByVal imp As Integer)End Sub
Public Sub HacerDeposito(ByVal imp As Integer, ByVal acreditar As Boolean)End Sub
Sobrecarga: varios métodos con el mismo nombre pero Sobrecarga: varios métodos con el mismo nombre pero diferentes parametros.diferentes parametros.
Sobrecarga: varios métodos con el mismo nombre pero Sobrecarga: varios métodos con el mismo nombre pero diferentes parametros.diferentes parametros.
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
NamespacesNamespaces
C#C# C#C# VB.NETVB.NET VB.NETVB.NETnamespace BancoARG{ namespace Gestion { public class CtaCte { } public class CajaAhorro { } }}
//Referencia “full”BancoARG.Gestion.CtaCte;BancoARG.Gestion.CajaAhorro;
//Referencia “corta”using BancoARG.Gestion;CtaCte cc = new CtaCte();CajaAhorro ca = new CajaAhorro();
Namespace BancoARG Namespace Gestion Public Class CtaCte End Class Public Class CajaAhorro End Class End NamespaceEnd Namespace
‘Referencia “full”BancoARG.Gestion.CtaCteBancoARG.Gestion.CajaAhorro
‘Referencia a un namespaceImports BancoARG.GestionDim cc As New CtaCte()Dim ca As New CajaAhorro()
Namespace: grupo de clases que tienen el mismo prefijoNamespace: grupo de clases que tienen el mismo prefijo Namespace: grupo de clases que tienen el mismo prefijoNamespace: grupo de clases que tienen el mismo prefijo
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
HerenciaHerencia
En C# la herencia se define:En C# la herencia se define: En C# la herencia se define:En C# la herencia se define:
VB.NET usa la palabra clave InheritsVB.NET usa la palabra clave Inherits VB.NET usa la palabra clave InheritsVB.NET usa la palabra clave Inherits
class Cuenta //Clase Padre{ }class CtaCte : Cuenta //Clase Hija{ }
Class Cuenta ‘Clase PadreEnd Class
Class CtaCte ‘Clase Hija Inherits CuentaEnd Class
Herencia: mecanismo por el cual una clase (hija) hereda de Herencia: mecanismo por el cual una clase (hija) hereda de otra (padre) para extender su funcionalidad.otra (padre) para extender su funcionalidad.
Herencia: mecanismo por el cual una clase (hija) hereda de Herencia: mecanismo por el cual una clase (hija) hereda de otra (padre) para extender su funcionalidad.otra (padre) para extender su funcionalidad.
En .NET solose permiteHerenciaSimple
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
HerenciaHerenciaHerenciaHerencia
class MyBaseClass{}
class MyDerivedClass: MyBaseClass{}
Class MyBaseClassEnd Class
Class MyDerivedClass Inherits MyBaseClassEnd Class
Hereda: Hereda: Todas las operaciones y atributos públicos y Todas las operaciones y atributos públicos y
privadosprivados Los constructores y destructores no son Los constructores y destructores no son
heredadosheredados
Hereda: Hereda: Todas las operaciones y atributos públicos y Todas las operaciones y atributos públicos y
privadosprivados Los constructores y destructores no son Los constructores y destructores no son
heredadosheredados
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
HerenciaHerencia
En C#En C# En C#En C#
VB.NETVB.NET VB.NETVB.NET
public sealed class Cuenta{ }public abstract class Cuenta{ }
Public NotInheritable Class CuentaEnd Class
Public MustInherit Class CuentaEnd Class
Dos keywords que afectan la “posiblidad” de heredar Dos keywords que afectan la “posiblidad” de heredar desde una clase base.desde una clase base.
Dos keywords que afectan la “posiblidad” de heredar Dos keywords que afectan la “posiblidad” de heredar desde una clase base.desde una clase base.
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Invocando el Constructor Base en C#Invocando el Constructor Base en C#Invocando el Constructor Base en C#Invocando el Constructor Base en C#
El contructor “default” siempre invoca El contructor “default” siempre invoca al constructor de la clase baseal constructor de la clase base
El contructor “default” siempre invoca El contructor “default” siempre invoca al constructor de la clase baseal constructor de la clase base
class MyBaseClass{
public MyBaseClass(int i){}protected MyBaseClass(string s){}
}class MyDerivedClass: MyBaseClass{
public MyDerivedClass(int i): base(i){}public MyDerivedClass(): base("Test"){}
}
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Class MyBaseClass Public Sub New(ByVal i As Integer) End Sub Protected Sub New(ByVal s As String) End SubEnd ClassClass MyDerivedClass Inherits MyBaseClass Public Sub New(ByVal i As Integer) MyBase.New(i) End Sub Public Sub New() MyBase.New("Test") End SubEnd Class
Invocando el Constructor Base en Invocando el Constructor Base en VB.NETVB.NETInvocando el Constructor Base en Invocando el Constructor Base en VB.NETVB.NET El contructor “default” siempre invoca El contructor “default” siempre invoca
al constructor de la clase baseal constructor de la clase base El contructor “default” siempre invoca El contructor “default” siempre invoca
al constructor de la clase baseal constructor de la clase base
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Protegiendo el Acceso a MiembrosProtegiendo el Acceso a MiembrosC#C#Protegiendo el Acceso a MiembrosProtegiendo el Acceso a MiembrosC#C#
““Publico” a las Publico” a las clases clases derivadasderivadas
““Privado” a las Privado” a las clases externasclases externas
No puede ser No puede ser usado en usado en estructurasestructuras
““Publico” a las Publico” a las clases clases derivadasderivadas
““Privado” a las Privado” a las clases externasclases externas
No puede ser No puede ser usado en usado en estructurasestructuras
class MyBaseClass{
protected string field;}class MyDerivedClass: MyBaseClass{}class ThirdLevel: MyDerivedClass{
public string MyField(){
return field;}
}
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Class MyBaseClass Protected field As StringEnd ClassClass MyDerivedClass Inherits MyBaseClassEnd Class
Class ThirdLevel Inherits MyDerivedClass Public Function MyField() As String Return field End FunctionEnd Class
Protegiendo el Acceso a Miembros Protegiendo el Acceso a Miembros VB.NETVB.NETProtegiendo el Acceso a Miembros Protegiendo el Acceso a Miembros VB.NETVB.NET
““Publico” a Publico” a las clases las clases derivadasderivadas
““Privado” a Privado” a las clases las clases externasexternas
No puede ser No puede ser usado en usado en estructurasestructuras
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
LaboratorioLaboratorio•Clases y HerenciaClases y Herencia
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Partial ClassPartial ClassPartial ClassPartial Class Permite que una implementación abarque multiples archivosPermite que una implementación abarque multiples archivos
Valido para clases y structs (y C# interfaces)Valido para clases y structs (y C# interfaces) Declaradas utilizando el nuevo modificador partialDeclaradas utilizando el nuevo modificador partial
Provee una serie de beneficiosProvee una serie de beneficios Implementaciones grandes pueden ser divididasImplementaciones grandes pueden ser divididas Código de usuario puede ser separado de código Código de usuario puede ser separado de código
generado automaticamentegenerado automaticamente Previene que la re-generación de código sobreescriba Previene que la re-generación de código sobreescriba
cambioscambios Utilizado por WinForms y DataSets fuertemente Utilizado por WinForms y DataSets fuertemente
tipadostipados Varios desarrolladores pueden trabajar en la misma Varios desarrolladores pueden trabajar en la misma
clase.clase. Permite code-beside en lugar de code-behindPermite code-beside en lugar de code-behind
Utilizado por ASP.NET 2.0Utilizado por ASP.NET 2.0 Permite mejor mantenimiento y control de código fuente.Permite mejor mantenimiento y control de código fuente.
Permite que una implementación abarque multiples archivosPermite que una implementación abarque multiples archivos Valido para clases y structs (y C# interfaces)Valido para clases y structs (y C# interfaces) Declaradas utilizando el nuevo modificador partialDeclaradas utilizando el nuevo modificador partial
Provee una serie de beneficiosProvee una serie de beneficios Implementaciones grandes pueden ser divididasImplementaciones grandes pueden ser divididas Código de usuario puede ser separado de código Código de usuario puede ser separado de código
generado automaticamentegenerado automaticamente Previene que la re-generación de código sobreescriba Previene que la re-generación de código sobreescriba
cambioscambios Utilizado por WinForms y DataSets fuertemente Utilizado por WinForms y DataSets fuertemente
tipadostipados Varios desarrolladores pueden trabajar en la misma Varios desarrolladores pueden trabajar en la misma
clase.clase. Permite code-beside en lugar de code-behindPermite code-beside en lugar de code-behind
Utilizado por ASP.NET 2.0Utilizado por ASP.NET 2.0 Permite mejor mantenimiento y control de código fuente.Permite mejor mantenimiento y control de código fuente.
Partial Class – Ejemplo (C#)Partial Class – Ejemplo (C#)Partial Class – Ejemplo (C#)Partial Class – Ejemplo (C#)
Class1.cs
Class2.cs
Class3.cs
Partial Class – Ejemplo (VB.NET)Partial Class – Ejemplo (VB.NET)Partial Class – Ejemplo (VB.NET)Partial Class – Ejemplo (VB.NET)
Class1.cs
Class2.cs
Class3.cs
Usando Partial ClassUsando Partial ClassUsando Partial ClassUsando Partial Class
Dividir una clase no afecta el compilado del códigoDividir una clase no afecta el compilado del código Todas las partes se unen al compilarTodas las partes se unen al compilar No se puede extender una clase ya compiladaNo se puede extender una clase ya compilada
El código es acumulativo o no acumulativo.El código es acumulativo o no acumulativo. Los elementos acumulativos se unenLos elementos acumulativos se unen
Incluye métodos, campos e interfacesIncluye métodos, campos e interfaces Elementos no acumulativos deben coincidir en todas las Elementos no acumulativos deben coincidir en todas las
partespartes Incluye tipos, visibilidad y clases baseIncluye tipos, visibilidad y clases base
Ayuda a estar de acuerdo en la convención de nomrbesAyuda a estar de acuerdo en la convención de nomrbes Por ejemplo MyCls.Part1.cs y MyCls.Part2.csPor ejemplo MyCls.Part1.cs y MyCls.Part2.cs
El visor de clases y la barra de navegación reflejan las clases El visor de clases y la barra de navegación reflejan las clases enterasenteras
Dividir una clase no afecta el compilado del códigoDividir una clase no afecta el compilado del código Todas las partes se unen al compilarTodas las partes se unen al compilar No se puede extender una clase ya compiladaNo se puede extender una clase ya compilada
El código es acumulativo o no acumulativo.El código es acumulativo o no acumulativo. Los elementos acumulativos se unenLos elementos acumulativos se unen
Incluye métodos, campos e interfacesIncluye métodos, campos e interfaces Elementos no acumulativos deben coincidir en todas las Elementos no acumulativos deben coincidir en todas las
partespartes Incluye tipos, visibilidad y clases baseIncluye tipos, visibilidad y clases base
Ayuda a estar de acuerdo en la convención de nomrbesAyuda a estar de acuerdo en la convención de nomrbes Por ejemplo MyCls.Part1.cs y MyCls.Part2.csPor ejemplo MyCls.Part1.cs y MyCls.Part2.cs
El visor de clases y la barra de navegación reflejan las clases El visor de clases y la barra de navegación reflejan las clases enterasenteras
Métodos VirtualesMétodos VirtualesMétodos VirtualesMétodos Virtuales
Es un método que la clase base permite Es un método que la clase base permite que sea sobrescrito en una clase derivadaque sea sobrescrito en una clase derivada
Un método no-virtual es la UNICA Un método no-virtual es la UNICA implementación posible para este métodoimplementación posible para este método
No puede ser No puede ser estáticoestático
No puede No puede ser privado ser privado
Es un método que la clase base permite Es un método que la clase base permite que sea sobrescrito en una clase derivadaque sea sobrescrito en una clase derivada
Un método no-virtual es la UNICA Un método no-virtual es la UNICA implementación posible para este métodoimplementación posible para este método
No puede ser No puede ser estáticoestático
No puede No puede ser privado ser privado
class MyBaseClass{
public virtual void MyMethod(){}
}
Class MyBaseClass Public Overridable Sub MyMethod() End SubEnd Class
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Sobrescribiendo Métodos VirtualesSobrescribiendo Métodos VirtualesSobrescribiendo Métodos VirtualesSobrescribiendo Métodos Virtuales
Class MyBaseClass Public Overridable Sub MyMethod() End SubEnd Class
Class MyDerivedClass Inherits MyBaseClass Public Overrides Sub MyMethod() End SubEnd Class
Debe tener la misma Debe tener la misma firma para el métodofirma para el método
No se puede No se puede sobrescribir un método sobrescribir un método sobrescritosobrescrito
Override = virtual to Override = virtual to third levelthird level
No puede ser estático o No puede ser estático o privadoprivado
class MyBaseClass{
public virtual void MyMethod(){}}class MyDerivedClass: MyBaseClass{
public override void MyMethod(){}}
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
OcultamientoOcultamientoOcultamientoOcultamiento
Esconde un método idénticoEsconde un método idéntico Introduce un nuevo método a la Introduce un nuevo método a la
jerarquía de la clasejerarquía de la clase Oculta los métodos virtuales y no-Oculta los métodos virtuales y no-
virtualvirtual Esconde métodos con firmas Esconde métodos con firmas
idénticasidénticas Esconde campos con el mismo Esconde campos con el mismo
identificadoridentificador
Esconde un método idénticoEsconde un método idéntico Introduce un nuevo método a la Introduce un nuevo método a la
jerarquía de la clasejerarquía de la clase Oculta los métodos virtuales y no-Oculta los métodos virtuales y no-
virtualvirtual Esconde métodos con firmas Esconde métodos con firmas
idénticasidénticas Esconde campos con el mismo Esconde campos con el mismo
identificadoridentificador
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Ocultando métodos no virtuales (C#)Ocultando métodos no virtuales (C#)Ocultando métodos no virtuales (C#)Ocultando métodos no virtuales (C#)
class MyBaseClass{
public void MyMethod(){}
}class MyDerivedClass: MyBaseClass{
new public virtual void MyMethod(){}}class ThirdLevel: MyDerivedClass{
public override void MyMethod(){}}
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Ocultando métodos no virtuales Ocultando métodos no virtuales (VB.NET)(VB.NET)Ocultando métodos no virtuales Ocultando métodos no virtuales (VB.NET)(VB.NET)
Class MyBaseClass Public Sub MyMethod() End SubEnd Class
Class MyDerivedClass Inherits MyBaseClass
Public Overridable Shadows Sub MyMethod() End SubEnd Class
Class ThirdLevel Inherits MyDerivedClass
Public Overrides Sub MyMethod() End SubEnd Class
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Ocultando camposOcultando camposOcultando camposOcultando campos
class MyBaseClass{
public int i;}class MyDerivedClass: MyBaseClass{
new public int i;}class ThirdLevel: MyDerivedClass{
public void MyMethod(){
i = 10;}
}
Class MyBaseClass Public i As IntegerEnd Class
Class MyDerivedClass Inherits MyBaseClass Public Shadows i As IntegerEnd Class
Class ThirdLevel Inherits MyDerivedClass
Public Sub MyMethod() i = 10 End SubEnd Class
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
LaboratorioLaboratorio•Métodos virtuales y ocultamientoMétodos virtuales y ocultamiento
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
InterfacesInterfacesInterfacesInterfaces
Contienen solo métodos sin implementaciónContienen solo métodos sin implementación Describen un “contrato”Describen un “contrato” No heredan atributosNo heredan atributos No se pueden crear instancias de una No se pueden crear instancias de una
interfaseinterfase Las clases derivadas deben de implementar Las clases derivadas deben de implementar
todas las operaciones heredadastodas las operaciones heredadas
Contienen solo métodos sin implementaciónContienen solo métodos sin implementación Describen un “contrato”Describen un “contrato” No heredan atributosNo heredan atributos No se pueden crear instancias de una No se pueden crear instancias de una
interfaseinterfase Las clases derivadas deben de implementar Las clases derivadas deben de implementar
todas las operaciones heredadastodas las operaciones heredadasITransportable
Acelera
Frena
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
InterfacesInterfaces
C#: las Interfaces son declaradas mediante interfaseC#: las Interfaces son declaradas mediante interfase
VB.NET usa las palabras Interfase / End InterfaseVB.NET usa las palabras Interfase / End Interfase
//Definicion de la clase CtaCteinterfase ICtaCte{
//Definicion de miembros}
‘Definicion de la clase CtaCteInterfase ICtaCte
‘Definicion de miembrosEnd Interfase
Interfaz: Define un contrato. Una clase o estructura Interfaz: Define un contrato. Una clase o estructura que la implementa, adhiere al mismo.que la implementa, adhiere al mismo.
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
InterfacesInterfacesInterfacesInterfaces
Los métodos son implícitamente públicosLos métodos son implícitamente públicos Los métodos no tienen cuerpo (implementación)Los métodos no tienen cuerpo (implementación) No se declaran “access modifiers”No se declaran “access modifiers” Estándar Estándar Se les agrega el prefijo “I” Se les agrega el prefijo “I”
Los métodos son implícitamente públicosLos métodos son implícitamente públicos Los métodos no tienen cuerpo (implementación)Los métodos no tienen cuerpo (implementación) No se declaran “access modifiers”No se declaran “access modifiers” Estándar Estándar Se les agrega el prefijo “I” Se les agrega el prefijo “I”
interface IMyInterface{
void MyMethod1();bool MyMethod2(string s);
}
Interface IMyInterface Sub MyMethod1() Function MyMethod2(ByVal s As String) As BooleanEnd Interface
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Métodos de las InterfacesMétodos de las InterfacesMétodos de las InterfacesMétodos de las Interfaces
Una clase puede implementar cero, Una clase puede implementar cero, una o más interfasesuna o más interfases
Deben de implementarse todos los Deben de implementarse todos los métodos heredados por la interfasemétodos heredados por la interfase
Las interfases a su vez pueden Las interfases a su vez pueden heredar de múltiples interfasesheredar de múltiples interfases
Una clase puede implementar cero, Una clase puede implementar cero, una o más interfasesuna o más interfases
Deben de implementarse todos los Deben de implementarse todos los métodos heredados por la interfasemétodos heredados por la interfase
Las interfases a su vez pueden Las interfases a su vez pueden heredar de múltiples interfasesheredar de múltiples interfases
System.String
Object IEnumerable IConvertible IComparable IClonable
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Escribe el método exactamente de la misma forma que el Escribe el método exactamente de la misma forma que el método de la interfasemétodo de la interfase
El mismo “access modifier” (public), el mismo tipo de El mismo “access modifier” (public), el mismo tipo de retorno, mismo nombre, mismos parámetrosretorno, mismo nombre, mismos parámetros
El método implementado puede ser virtual o no virtualEl método implementado puede ser virtual o no virtual
Escribe el método exactamente de la misma forma que el Escribe el método exactamente de la misma forma que el método de la interfasemétodo de la interfase
El mismo “access modifier” (public), el mismo tipo de El mismo “access modifier” (public), el mismo tipo de retorno, mismo nombre, mismos parámetrosretorno, mismo nombre, mismos parámetros
El método implementado puede ser virtual o no virtualEl método implementado puede ser virtual o no virtual
Implementando Métodos de una Implementando Métodos de una InterfaseInterfaseImplementación Implicita (C#)Implementación Implicita (C#)
Implementando Métodos de una Implementando Métodos de una InterfaseInterfaseImplementación Implicita (C#)Implementación Implicita (C#)
interface IMyInterface{
void MyMethod1();bool MyMethod2(string s);
}class MyClass: IMyInterface{
public virtual void MyMethod1() {}public bool MyMethod2(string s) {}public void OtherMethod() {}
}
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Puede ser invocada directamente a Puede ser invocada directamente a través de una clase o estructura.través de una clase o estructura.
Puede realizarse un “cast” al tipo de Puede realizarse un “cast” al tipo de la interfasela interfase
Puede ser invocada directamente a Puede ser invocada directamente a través de una clase o estructura.través de una clase o estructura.
Puede realizarse un “cast” al tipo de Puede realizarse un “cast” al tipo de la interfasela interfase
Invocando Métodos de una InterfaseInvocando Métodos de una InterfaseImplementación Implícita (C#)Implementación Implícita (C#)Invocando Métodos de una InterfaseInvocando Métodos de una InterfaseImplementación Implícita (C#)Implementación Implícita (C#)
MyClass mc = new MyClass();mc.MyMethod1();mc.OtherMethod();
IMyInterface mi = mc;bool b = mi.MyMethod2(“Hello”);
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Debe usarse el nombre completo del método para su acceso Debe usarse el nombre completo del método para su acceso (fully qualified name)(fully qualified name)
No puede ser declarada como virtualNo puede ser declarada como virtual No puede especificar un “access modifier”No puede especificar un “access modifier” Solo puede ser accesado a través de la interfaseSolo puede ser accesado a través de la interfase
Debe usarse el nombre completo del método para su acceso Debe usarse el nombre completo del método para su acceso (fully qualified name)(fully qualified name)
No puede ser declarada como virtualNo puede ser declarada como virtual No puede especificar un “access modifier”No puede especificar un “access modifier” Solo puede ser accesado a través de la interfaseSolo puede ser accesado a través de la interfase
Implementando Métodos de una Implementando Métodos de una InterfaseInterfaseImplementación Explicita (C#)Implementación Explicita (C#)
Implementando Métodos de una Implementando Métodos de una InterfaseInterfaseImplementación Explicita (C#)Implementación Explicita (C#)
interface IMyInterface{
void MyMethod1();bool MyMethod2(string s);
}class MyClass: IMyInterface{
void IMyInterface.MyMethod1() {}bool IMyInterface.MyMethod2(string s) {}
}
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Invocando Métodos de una Interfase Invocando Métodos de una Interfase Implementación Explícita (C#)Implementación Explícita (C#)Invocando Métodos de una Interfase Invocando Métodos de una Interfase Implementación Explícita (C#)Implementación Explícita (C#)
No puede ser invocado de forma directaNo puede ser invocado de forma directa No es parte publica de una clase No es parte publica de una clase Debe ser aplicado un “cast” al tipo de la interfase y llamado Debe ser aplicado un “cast” al tipo de la interfase y llamado
desde el tipo de la interfasedesde el tipo de la interfase En las estructuras esto significa una operación de En las estructuras esto significa una operación de
“boxing”“boxing”
No puede ser invocado de forma directaNo puede ser invocado de forma directa No es parte publica de una clase No es parte publica de una clase Debe ser aplicado un “cast” al tipo de la interfase y llamado Debe ser aplicado un “cast” al tipo de la interfase y llamado
desde el tipo de la interfasedesde el tipo de la interfase En las estructuras esto significa una operación de En las estructuras esto significa una operación de
“boxing”“boxing”
MyClass mc = new MyClass();mc.MyMethod1();
IMyInterface mi = new MyClass();mc.MyMethod1();bool b = mi.MyMethod2(“Hello”);
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Permite que la implementación de la interfase sea excluida Permite que la implementación de la interfase sea excluida de la cara pública de la clase o estructurade la cara pública de la clase o estructura Implementa de forma interna una interfase que no es de Implementa de forma interna una interfase que no es de
interés para el usuario de la clase o estructurainterés para el usuario de la clase o estructura Resuelve conflictos de nombreResuelve conflictos de nombre
Permite que la implementación de la interfase sea excluida Permite que la implementación de la interfase sea excluida de la cara pública de la clase o estructurade la cara pública de la clase o estructura Implementa de forma interna una interfase que no es de Implementa de forma interna una interfase que no es de
interés para el usuario de la clase o estructurainterés para el usuario de la clase o estructura Resuelve conflictos de nombreResuelve conflictos de nombre
Implementando Métodos de una Implementando Métodos de una Interfase Interfase Ventajas: Implementación Explícita (C#)Ventajas: Implementación Explícita (C#)
Implementando Métodos de una Implementando Métodos de una Interfase Interfase Ventajas: Implementación Explícita (C#)Ventajas: Implementación Explícita (C#)
interface IMyInterface1 {
void MyMethod();}interface IMyInterface2 {
void MyMethod();}class MyClass: IMyInterface1, IMyInterface2{
void IMyInterface1.MyMethod() {}void IMyInterface2.MyMethod() {}
}
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Implementando Métodos de una InterfaseImplementando Métodos de una Interfase VB.NETVB.NETImplementando Métodos de una InterfaseImplementando Métodos de una Interfase VB.NETVB.NET
Interface IMyInterface Sub MyMethod1() Sub MyMethod2() Sub MyMethod3() Sub MyMethod4() Sub MyMethod5()End Interface
Class [MyClass] Implements IMyInterface
Public Sub MyMethod1() Implements IMyInterface.MyMethod1 End Sub
Public Overridable Sub MyMethod2() _ Implements IMyInterface.MyMethod2 End Sub
Private Sub MyMethod3() _ Implements IMyInterface.MyMethod3 End Sub
Public Sub WhateverMethod() _ Implements IMyInterface.MyMethod4, IMyInterface.MyMethod5 End SubEnd ClassP
OO
y S
inta
xis
PO
O y
Sin
taxi
s
Invocando Métodos de una Interfase Invocando Métodos de una Interfase VB.NETVB.NETInvocando Métodos de una Interfase Invocando Métodos de una Interfase VB.NETVB.NET
Si fue declarada pública puede ser Si fue declarada pública puede ser invocada de forma directainvocada de forma directa
Si fue declarada como privada deberá Si fue declarada como privada deberá ser invocada a través de un “cast” al ser invocada a través de un “cast” al tipo de la interfase.tipo de la interfase. Para las estructuras esto significa una Para las estructuras esto significa una
operación de “boxing”operación de “boxing”
Si fue declarada pública puede ser Si fue declarada pública puede ser invocada de forma directainvocada de forma directa
Si fue declarada como privada deberá Si fue declarada como privada deberá ser invocada a través de un “cast” al ser invocada a través de un “cast” al tipo de la interfase.tipo de la interfase. Para las estructuras esto significa una Para las estructuras esto significa una
operación de “boxing”operación de “boxing”
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Clases AbstractasClases AbstractasClases AbstractasClases Abstractas
Proveen una implementación parcial Proveen una implementación parcial para que sea heredada por las clases para que sea heredada por las clases derivadasderivadas
No pueden ser instanciadasNo pueden ser instanciadas Utiliza el calificador abstract en C#Utiliza el calificador abstract en C# Use MustInherit keyword in VB.NETUse MustInherit keyword in VB.NET
Proveen una implementación parcial Proveen una implementación parcial para que sea heredada por las clases para que sea heredada por las clases derivadasderivadas
No pueden ser instanciadasNo pueden ser instanciadas Utiliza el calificador abstract en C#Utiliza el calificador abstract en C# Use MustInherit keyword in VB.NETUse MustInherit keyword in VB.NET
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Clases AbstractasClases AbstractasC#C#Clases AbstractasClases AbstractasC#C#interface ITransporte{
string Name();}
abstract class Transporte: ITransporte{
string Name(){ ... }
}
class Taxi: Transporte{ ... }
class Colectivo: Transporte{ ... }
«interface»ITransporte
Transporte{ abstract }
Taxi<<Concrete>>
Colectivo<<Concrete>>
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Clases AbstractasClases AbstractasVB.NETVB.NETClases AbstractasClases AbstractasVB.NETVB.NETInterface ITransporte Function Name() As StringEnd Interface
MustInherit Class Transporte Implements ITransporte
Private Function Name() As String _ Implements ITransporte.Name '... End Function
End Class
Class Taxi Inherits Transporte '...End Class
Class Colectivo Inherits Transporte '...End Class
«interface»ITransporte
Transporte{ abstract }
Taxi<<Concrete>>
Colectivo<<Concrete>>
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Clases AbstractasClases AbstractasClases AbstractasClases Abstractas
interface ITransporte{
string Name();}
abstract class Transporte{
public virtual string Name(){ ... }
}
class Taxi: Transporte, ITransporte{ ... }
class Colectivo: Transporte, ITransporte{ ... }
«interface»ITtansporte
Transporte{ abstract }
Taxi<<Concrete>>
Colectivo<<Concrete>>
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Clases AbstractasClases AbstractasClases AbstractasClases Abstractas
«interface»ITtansporte
Transporte{ abstract }
Taxi<<Concrete>>
Colectivo<<Concrete>>
Interface IToken Function Name() As StringEnd Interface
MustInherit Class Token Public Overridable Function Name() As String '... End Function
End Class
Class CommentToken Inherits Token Implements IToken '...End Class
Class KeywordToken Inherits Token Implements IToken '...End Class1
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Métodos AbstractosMétodos AbstractosMétodos AbstractosMétodos Abstractos
Solo en clases abstractasSolo en clases abstractas No pueden contener implementaciónNo pueden contener implementación Deben ser implementados por las clases derivadasDeben ser implementados por las clases derivadas Utiliza el calificador Utiliza el calificador abstractabstract en C# en C# Utiliza Utiliza MustOverrideMustOverride en VB.NET en VB.NET Los métodos abstractos son virtualesLos métodos abstractos son virtuales Los métodos abstractos pueden sobrescribir Los métodos abstractos pueden sobrescribir
métodos de la clase base declarados como métodos de la clase base declarados como virtualesvirtuales
Los métodos abstractos pueden sobrescribir Los métodos abstractos pueden sobrescribir métodos de la clase base declarados como métodos de la clase base declarados como “override”“override”
Solo en clases abstractasSolo en clases abstractas No pueden contener implementaciónNo pueden contener implementación Deben ser implementados por las clases derivadasDeben ser implementados por las clases derivadas Utiliza el calificador Utiliza el calificador abstractabstract en C# en C# Utiliza Utiliza MustOverrideMustOverride en VB.NET en VB.NET Los métodos abstractos son virtualesLos métodos abstractos son virtuales Los métodos abstractos pueden sobrescribir Los métodos abstractos pueden sobrescribir
métodos de la clase base declarados como métodos de la clase base declarados como virtualesvirtuales
Los métodos abstractos pueden sobrescribir Los métodos abstractos pueden sobrescribir métodos de la clase base declarados como métodos de la clase base declarados como “override”“override”
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
Métodos “estáticos”Métodos “estáticos”
C#C# C#C#
VB.NETVB.NET VB.NETVB.NET
public static void HacerDeposito(int importe) {
}
Public Shared Sub HacerDeposito(ByVal imp As Integer)
End Sub
Miembros que no requieren de una instancia para ser Miembros que no requieren de una instancia para ser invocadosinvocados
Miembros que no requieren de una instancia para ser Miembros que no requieren de una instancia para ser invocadosinvocados
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
ResumenResumen
Hemos visto la los conceptos Hemos visto la los conceptos principales de Programación principales de Programación Orientada a Objetos, aplicados a la Orientada a Objetos, aplicados a la sintaxis de los lenguajes sintaxis de los lenguajes Soportados por .NETSoportados por .NET
Se implementaron clases, herencia, Se implementaron clases, herencia, métodos virtuales y clases métodos virtuales y clases abstractasabstractas
PO
O y
Sin
taxi
sP
OO
y S
inta
xis
AgendaAgenda
Conversión de tiposConversión de tipos POO y SintaxisPOO y Sintaxis
Clases, Métodos Clases, Métodos Herencia y ConstructoresHerencia y Constructores Partial ClassesPartial Classes OcultamientoOcultamiento Clases Abstractas e InterfacesClases Abstractas e Interfaces
Class DesignerClass Designer
Class DesignerClass DesignerC
lass
Des
ign
er
Cla
ss D
esig
ne
r
Usar Class Diagrams para…Usar Class Diagrams para…
Entender el código existenteEntender el código existente Diseñar las clasesDiseñar las clases Revisar y modificar códigoRevisar y modificar código Generar diagramas para Generar diagramas para
documentacióndocumentación
Cla
ss D
esig
ne
rC
lass
Des
ign
er
Class DesignerClass Designer
Refleja el archivo de código fuente Refleja el archivo de código fuente relacionadorelacionado El diagrama es una vista del códigoEl diagrama es una vista del código
Almacenado a nivel de proyectoAlmacenado a nivel de proyecto Soporta herenciaSoporta herencia Soporta asociacionesSoporta asociaciones Soporta enums y structsSoporta enums y structs
Cla
ss D
esig
ne
rC
lass
Des
ign
er
Class DesignerClass Designer
Elementos del designerElementos del designer ClassClass EnumEnum InterfaceInterface Abstract ClassAbstract Class StructStruct DelegateDelegate InheritanceInheritance AssociationAssociation CommentComment
Cla
ss D
esig
ne
rC
lass
Des
ign
er
Class Designer – Agregando una Class Designer – Agregando una claseclase
Cla
ss D
esig
ne
rC
lass
Des
ign
er
Class DesignerClass Designer Implementando una InterfaseImplementando una Interfase Visualizando la jerarquía de clasesVisualizando la jerarquía de clases
Cla
ss D
esig
ne
rC
lass
Des
ign
er
LaboratorioLaboratorio•Class DesignerClass Designer
Cla
ss D
esig
ne
rC
lass
Des
ign
er
ResumenResumen
Luego de comprender Luego de comprender programáticamente la forma en la programáticamente la forma en la que se trabaja con clases, se que se trabaja con clases, se incorporó la herramienta de Class incorporó la herramienta de Class Desginer de Visual Studio, que Desginer de Visual Studio, que permite desarrollar de manera permite desarrollar de manera sencilla y documentar nuestro sencilla y documentar nuestro modelo paralelamente.modelo paralelamente.
Cla
ss D
esig
ne
rC
lass
Des
ign
er