SlideShare una empresa de Scribd logo
1 de 63
Descargar para leer sin conexión
Tutorial de C#
Programación OO
Por: Óscar López, M.Sc.
olopez@uniandino.com.co
OALP-2004 All Rights Reserved
¡Hola Mundo!
1. using System;
2. namespace HolaMundo {
3. /// <summary>
4. /// Summary description for Hola.
5. /// </summary>
6. class Hola {
7. /// <summary>
8. /// The main entry point for the application.
9. /// </summary>
10. [STAThread]
11. static void Main() {
12. Console.WriteLine(“¡Hola Mundo!”);
13. }
14.
15. }
16. }
OALP-2004 All Rights Reserved
CREACIÓN DE OBJETOS
OALP-2004 All Rights Reserved
Clases - Roles y Funciones
Generador de nuevos objetos
Descripción de la representación de sus instancias
Descripción del protocolo de mensajes de sus instancias
Elemento de la descripción de la taxonomía de un objeto
Un medio para implementar programación diferencial
Repositorio de métodos para recibir mensajes
Artefacto para actualizar muchos objetos cuando ocurre
un cambio
Conjunto de todas las instancias de una clase
OALP-2004 All Rights Reserved
Clases - Definición
[[atributos]] [modificadores]
class identificador [: base,]
{cuerpo clase}
• Atributos: anotaciones usadas para proporcionar meta-
datos sobre la clase
• Identificador: nombre, notación de Pascal
• Base: Clase, Clase Abstracta, Interfaz(ces). Atención:
sólo una clase, y las interfaces van al final
OALP-2004 All Rights Reserved
Modificador Comentario
new Sólo aplica para clases anidadas,
las “esconde”
abstract Declara la clase como abstracta
internal Declara una clase anidada
sealed Declara la clase como sellada
Modificadores de Clase
OALP-2004 All Rights Reserved
Modificador Comentario
public Sin restricciones. Visible desde cualquier
método de cualquier clase
private Sólo es visible desde los métodos de la
misma clase
protected Visible desde los métodos de una clase y
todas sus sub-clases
internal Visible desde los métodos de todas las
clases dentro de un mismo ensamblaje
protected
internal
Visible desde los métodos de una clase,
sus sub-clases, y todas las clases en su
mismo ensamblaje
Modificadores de Acceso
OALP-2004 All Rights Reserved
Categoría Modificadores Aplicables Acceso por
Defecto
espacios de
nombres
(implícito) public public
clases, interfaces,
estructuras
public, internal internal
miembros de
clase (incluyendo
tipos anidados)
public, protected,
internal, protected
internal, private
private
miembros de
estructura
public, internal,
private
private
miembros de
interfaz
(implícito) public public
miembros de
enumeración
(implícito) public public
Aplicabilidad de Modificadores de Acceso
OALP-2004 All Rights Reserved
Instanciación - Palabras Clave
new
crea nuevas instancias de una clase o una
estructura
this
referencia a la instancia actual de un objeto
base
referencia a la super-clase de un objeto
OALP-2004 All Rights Reserved
Constructores de Instancia
El nombre del constructor debe ser el
mismo del nombre de la clase
No tienen un tipo de retorno
Si no se especifica, se crea un constructor
por defecto
Los constructores se pueden sobrecargar
y pueden llamar a otros constructores
dentro de la misma clase o en una super-
clase
OALP-2004 All Rights Reserved
Constructores de Instancia - Ejemplo
1. public class Window {
2. int top, left;
3.
4. public Window(int top, int left) {
5. this.top = top;
6. this.left = left;
7. }
8. }
9. public class ListBox : Window {
10. string mListBoxContents;
11. ListBox(int top, int left, string theContents)
12. : base(top, left) {
13. mListBoxContents = theContents;
14. }
15. ListBox(int top, int left)
16. : this(top, left, “”) {
17. }
18. }
OALP-2004 All Rights Reserved
Constructores Estáticos
No puede tener parámetros
No puede tener modificadores de acceso
No puede ser llamado explícitamente
Es llamado una sola vez, antes de crear la primera instancia
1. public class Window {
2. static GLibrary gLib;
3. static Window() {
4. gLib = getLib();
5. }
6. }
OALP-2004 All Rights Reserved
Tipo Valor por Defecto
Numérico (int, long, etc.) 0
bool false
char ‘0’
enum 0
referencia null
int num = -1;
Inicializadores, Valores por Defecto
OALP-2004 All Rights Reserved
¡Recolector de Basura!
Normalmente no son necesarios, sólo si se deben liberar recursos
“costosos”
Los destructores se llaman cuando un objeto es recolectado, es un
proceso no-determinístico
No se pueden llamar explícitamente (pero un objeto se puede “marcar”
para ser recolectado asignándole null)
1. ~Window() {
2. gLib.release();
3. }
1. protected override void Finalize() {
2. try {
3. gLib.release();
4. }
5. finally {
6. base.Finalize();
7. }
8. }
Destructores
OALP-2004 All Rights Reserved
Implementando IDispose
1. using System;
2.
3. class TestDispose : IDisposable {
4. bool isDisposed = false;
5. protected virtual void MyDispose() {
6. if ( !isDisposed ) { // sólo limpiar una vez!
7. Console.WriteLine(“Limpiando...”); // realizar la limpieza
8. }
9. this.isDisposed = true;
10. }
11. public void Dispose() {
12. MyDispose();
13. // decirle al recolector que no debe llamar al destructor
14. GC.SuppressFinalize(this);
15. }
16. ~TestDispose() {
17. MyDispose();
18. }
19. }
OALP-2004 All Rights Reserved
Declaración using
Debido a que no hay seguridad de que
Dispose() sea llamado, C# proporciona la
declaración using, la cual garantiza que
Dispose() sea llamado automáticamente
cuando se llega al corchete que cierra la
declaración
1. Font theFont = new Font(“Arial”, 10.0f);
2. using (theFont) {
3. // usar theFont
4. } // el compilador invocará Dispose() en theFont
OALP-2004 All Rights Reserved
Clases Anidadas
Típicamente, existe sólo para servir a la clase
que la contiene, como una clase auxiliar
Puede ocultarse de otras clases si se declara
como privada
Una clase anidada tiene acceso a todos los
miembros de la clase que la contiene, aún los
privados
Puede acceder a todos los miembros externos
que puedan ser accedidos por la clase que la
contiene
OALP-2004 All Rights Reserved
Clases Anidadas - Ejemplo
1. public class Fraction {
2. internal class FractionPaint {
3. public void Draw(Fraction f) {
4. Console.WriteLine(“Drawing Fraction…”);
5. }
6. }
7. }
Fraction f1 = new Fraction(3,4);
Fraction.FractionArtist fp = new Fraction.FractionPaint();
fp.Draw(f1);
OALP-2004 All Rights Reserved
Estructuras
[[atributos]] [modificadores acceso]
struct identificador [: interfaz,]
{cuerpo estructura}
Otro tipo de datos definido por el usuario
Una alternativa “liviana” a las clases (menos memoria, menos
funcionalidad)
Pueden tener: constructores, propiedades, métodos, campos,
operadores, tipos anidados y propiedades indexadas; pueden
implementar interfaces; se les reserva memoria al declararlas
No soportan destructores ni herencia, no pueden tener un
constructor sin parámetros ni usar inicializadores; sus “instancias”
son de tipo valor (a diferencia de las instancias de una clase, que
son de tipo referencia)
OALP-2004 All Rights Reserved
Estructuras - ¿Para Qué?
Deberían usarse para tipos pequeños, simples, con
comportamiento y características similares a las de los
tipos básicos. Ej.: un Punto con coordenadas (x, y)
Las operaciones sobre estructuras pueden ser más
rápidas en algunos casos, pero las asignaciones son
más costosas
Encapsular los miembros haciéndolos privados y
accediéndolos usando propiedades o métodos es
exagerar … en este caso acceder directamente al
estado de una estructura es más razonable
Es más eficiente usar estructuras en Arreglos que en
Colecciones
OALP-2004 All Rights Reserved
Estructuras - Ejemplo
1. using System;
2. public struct Point {
3. int x, y;
4. public Point(int xCoordinate, int yCoordinate) {
5. x = xCoordinate;
6. y = yCoordinate;
7. }
8. }
9. public class Tester {
10. static void Main() {
11. Point p1 = new Point(300,200);
12. Point p2;
13. p2.x = 640;
14. p2.y = 480; // No olvidar asignar todos los campos
15. }
16. }
OALP-2004 All Rights Reserved
COMPARTIR INFORMACIÓN
OALP-2004 All Rights Reserved
Herencia
En C#, una clase sólo puede tener una super-
clase, y todas las clases heredan de
System.Object
Una sub-clase hereda todos los miembros
visibles de su super-clase, y son tratados como
si hubieran sido definidos en la sub-clase
Las siguientes clases no pueden ser extendidas:
System.Array
System.Delegate
System.Enum
System.ValueType
OALP-2004 All Rights Reserved
Método Comentario
public virtual string
ToString()
representación textual del objeto
public virtual int
GetHashCode()
hash del objeto
public virtual bool
Equals(object a)
prueba igualdad entre objetos
public static bool
Equals(object a,object b)
prueba valores nulos, luego igualdad
public static bool
ReferenceEquals(object a,object b)
prueba identidad
public Type
GetType()
instancia de Type del objeto
protected object
MemberwiseClone()
copia superficial
protected virtual
Finalize()
limpieza
Métodos de System.Object
OALP-2004 All Rights Reserved
Polimorfismo
Capacidad de usar “muchas formas” de un
mismo tipo
Un miembro debe ser declarado explícitamente
como virtual para poder declarar override
sobre éste en una sub-clase
Un miembro virtual no puede ser declarado
como: static, abstract, override o private
Sólo los siguientes miembros pueden ser
declarados como virtual: métodos,
propiedades y propiedades indexadas
OALP-2004 All Rights Reserved
Uso de virtual y override
Una sub-clase no puede hacer override de
los miembros privados de una super-clase
Si una sub-clase tiene un método con la
misma firma de un método privado en una
super-clase, no se considera un override
El que un miembro de una clase sea
declarado como virtual no obliga a que sus
(posibles) sub-clases deban hacer
override de éste
OALP-2004 All Rights Reserved
Escondiendo Miembros con new
new
como modificador, al crear un nuevo miembro
de clase (método, campo, constante, propiedad,
tipo) que “esconde” el miembro heredado de
una super-clase
Una sub-clase es libre de implementar su propia
versión de un miembro de una super-clase. La
palabra clave new indica que la sub-clase,
intencionalmente, ha escondido y reemplazado
un miembro de su super-clase
OALP-2004 All Rights Reserved
Escondiendo Miembros - Ejemplo
1. using System;
2. class A {
3. public virtual void DoThis() {
4. Console.WriteLine(“A”);
5. }
6. }
7. class B : A { // B extiende A
8. public new void DoThis() {
9. Console.WriteLine(“B”);
10. }
11. }
12. class Test {
13. public static void Main() {
14. A temp1 = new A();
15. temp1.DoThis();
16. B temp2 = new B();
17. temp2.DoThis();
18. A temp3 = new B();
19. temp3.DoThis();
20. A temp4 = (A)temp2;
21. temp4.DoThis();
22. }
23. }
Cuando se usa new, el tipo de
dato de la variable usada para
referenciar un objeto se toma en
cuenta a la hora de determinar
cuál de los dos métodos invocar.
Si la variable es de tipo A, no
importa si la instancia a la que se
refiere es de clase A o B, se
llama el método DoThis() en A.
No se trata de un override de B,
simplemente, se lo ha
“escondido”
OALP-2004 All Rights Reserved
Clases Abstractas
Obligan a que las subclases implementen uno o
más métodos
No se pueden instanciar
Si una clase tiene un solo método abstracto,
ésta también debe declararse como abstracta
Se antepone la palabra clave abstract a la
definición de un método, no se implementa
Típicamente, se encuentran en la parte superior
de una jerarquía de clases
OALP-2004 All Rights Reserved
Clases Selladas
Lo opuesto a una clase abstracta
No permite que una clase tenga sub-clases
Se antepone la palabra clave sealed a la
definición de una clase
Se marcan como tal para prevenir “herencia
accidental”
Se debería marcar como sellada una clase en
donde todos sus miembros son estáticos
OALP-2004 All Rights Reserved
Interfaces
[[atributos]] [modificadores acceso]
interface identificador [: interfaz,]
{cuerpo interfaz}
Un contrato, un conjunto de capacidades ofrecidas por un objeto
En C#, una interfaz puede contener métodos, propiedades,
propiedades indexadas y eventos; no campos
Debe detallar el tipo de retorno, el nombre y los parámetros de un
método, sin especificar modificadores de acceso
Una interfaz no puede ser instanciada
Una clase puede implementar una o más interfaces
Por convención, su nombre empieza por ‘I’
OALP-2004 All Rights Reserved
Conversiones de Interfaces - is, as
IStorable isDoc = (IStorable) doc;
if (doc is IStorable)
IStorable isDoc = (IStorable) doc;
IStorable isDoc = doc as IStorable
OALP-2004 All Rights Reserved
¿Qué Define a un Objeto?
Estado
Comportamiento
Identidad
Eventos
OALP-2004 All Rights Reserved
Posibles Miembros de una Clase
Estado
Campos
Constantes
Campos de sólo lectura
Enumeraciones
Comportamiento
Constructores de instancia
Constructores estáticos
Destructores
Tipos anidados
Propiedades
Propiedades Indexadas
Métodos
Operadores
Delegados y Eventos
OALP-2004 All Rights Reserved
Miembros de Clase y de Instancia
Los siguientes miembros pueden ser declarados como
estáticos, usando la palabra clave static: constructores,
campos, campos de sólo lectura, propiedades, métodos,
operadores, eventos
Los miembros de instancia están asociados con
instancias de un tipo
Los miembros estáticos están asociados con una clase y
no con una instancia en particular y como tal, se
acceden anteponiendo el nombre de la clase y el
operador ‘.’ al nombre del miembro
Un miembro estático no puede ser declarado con
ninguno de éstos modificadores: virtual, override,
abstract
OALP-2004 All Rights Reserved
ESTADO
OALP-2004 All Rights Reserved
Campos
Variable asociada a una instancia o a una clase,
almacena los datos que definen las
características propias de un objeto. No
confundir con atributos ni con propiedades
Por convención, todos los campos son privados.
Si se necesita proporcionar acceso a éstos, se
recomienda usar propiedades
También por convención, se recomienda usar la
convención “Camel” para los nombres de los
campos (primera letra en minúsculas, palabras
separadas por una letra mayúscula)
El nombre de un campo no puede ser una
palabra reservada
OALP-2004 All Rights Reserved
Constantes
Representan valores que no cambian durante la
ejecución del programa
Se declaran usando la palabra clave const
Pueden ser de tipos valor (sbyte, byte,
short, ushort, int, uint, long, ulong,
float, double, decimal, bool, char) y
string
Pueden ser variables o campos de instancia
Son evaluadas en tiempo de compilación
// Número de milisegundos en un día
const long MS_POR_DIA = 1000*60*60*24;
OALP-2004 All Rights Reserved
Campos de Sólo Lectura
Se declaran usando la palabra clave readonly
Son más generales que las constantes
Pueden ser de cualquier tipo que sea evaluado una y
sólo una vez en tiempo de ejecución
Típicamente, son inicializados al momento de cargar
una clase (en el caso de campos estáticos) o al
momento de inicializar una instancia (para los campos
de instancia)
No sólo se pueden aplicar a campos constantes: se
pueden usar para datos que, una vez son asignados,
son invariantes (Ej., una cédula)
No confundir: un campo de sólo lectura no es inmutable;
cuando se aplica a un tipo referencia, sólo impide que la
referencia al objeto sea cambiada
OALP-2004 All Rights Reserved
Campos de Sólo Lectura - Ejemplo
1. using System;
2. using System.Threading;
3. public class ReadOnly {
4. int id;
5. readonly DateTime timeOfInstanceCreation = DateTime.Now;
6. static readonly DateTime timeOfClassLoad = DateTime.Now;
7. static readonly ReadOnly ro = new ReadOnly();
8. public ReadOnly() {
9. Console.WriteLine(“Clase cargada: {0}, Instancia creada: {1}”,
10. timeOfClassLoad, timeOfInstanceCreation);
11. }
12. public static void Main() {
13. const int size = 10;
14. for (int i = 0; i < size; i++) {
15. new ReadOnly();
16. Thread.Sleep(1000);
17. }
18. // Se puede cambiar un miembro
19. ro.id = 5;
20. Console.WriteLine(ro.id);
21. Console.ReadLine();
22. // El compilador dice “a static readonly field cannot be assigned to”
23. // ro = new ReadOnly();
24. }
25. }
OALP-2004 All Rights Reserved
Enumeraciones
[[atributos]] [modificadores]
enum identificador [: base]
{lista de enumeración,}
Proporcionan una alternativa al uso de constantes
Permiten agrupar constante relacionadas lógicamente
Son un tipo valor; consisten en un conjunto de
constantes con nombre (denominadas la lista de
enumeración)
La base es el tipo usado “por debajo” para representar la
enumeración. Puede ser cualquiera de los tipos enteros
excepto char
Si no se especifica una base, por defecto se utiliza int
OALP-2004 All Rights Reserved
Enumeraciones
Cada elemento de una enumeración
corresponde a un valor numérico. Por defecto,
una enumeración empieza en 0 y cada valor
siguiente aumenta una unidad respecto al
anterior
1. enum algunosValores {
2. Primero, // 0
3. Segundo, // 1
4. Tercero = 20, // 20
5. Cuarto // 21
6. }
OALP-2004 All Rights Reserved
Enumeraciones - Ejemplo
1. using System;
2. class Values {
3. // declaración de la enumeración
4. enum Temperatures : int {
5. WickedCold = 0,
6. FreezingPoint = 32,
7. LightJacketWeather = 60,
8. SwimmingWeather = 72,
9. BoilingPoint = 212
10. }
11. static void Main() {
12. Console.WriteLine(“Temperatura de congelación del agua: {0}”,
13. (int) Temperatures.FreezingPoint);
14. Console.WriteLine(“Temperatura de ebullición del agua: {0}”,
15. Temperatures.BoilingPoint);
16. Console.ReadLine();
17. }
18. }
OALP-2004 All Rights Reserved
COMPORTAMIENTO
OALP-2004 All Rights Reserved
Propiedades
[modificadores] tipo identificador {
get {
return campo;
}
set {
campo = value;
}
}
Una forma muy conveniente para encapsular un campo
Permite acceder a los campos usando métodos en forma transparente
Recomendado seguir la convención de Pascal para los identificadores
get o set son opcionales: propiedades de sólo lectura o de sólo escritura
No necesariamente debe existir un campo para cada propiedad: valores
derivados
Pueden heredarse de manera selectiva, declarándolas como virtual
OALP-2004 All Rights Reserved
Propiedades - Ejemplo
1. using System;
2. public class TestClass {
3. private string color = “yellow”;
4. public string Color { // propiedad Color
5. get {
6. return color;
7. }
8. set {
9. color = value;
10. }
11. }
12. public static void Main() {
13. TestClass c = new TestClass();
14. Console.WriteLine(c.Color); // get
15. c.Color = “blue”; // set
16. Console.WriteLine(c.Color); // get
17. }
18. }
OALP-2004 All Rights Reserved
Propiedades Indexadas
[modificadores] tipo this [tipo argumento,] {
get {
;
}
set {
;
}
}
Una forma conveniente para tratar un objeto que encapsula un
arreglo o una colección como si el objeto mismo fuera un arreglo
Una propiedad indexada se usa para representar la lista de objetos
contenidos en una clase, usando la notación objeto[índice]
Puede pasarse más de un argumento entre [], y de diferentes tipos
También puede ser declarado como virtual
Se recomienda no poner más de una propiedad indexada por clase
OALP-2004 All Rights Reserved
Propiedades Indexadas - Ejemplo
1. using System;
2. class TestClass {
3. // este es el arreglo encapsulado
4. string[] myArray = new string[10];
5. // constructor
6. public TestClass() {
7. for (int i=0; i<10; i++)
8. myArray[i] = “hola”;
9. }
10. // indexamos usando un entero
11. public string this[int index] {
12. get {
13. return myArray[index];
14. }
15. set {
16. myArray[index] = value;
17. }
18. }
19. // indexador sobrecargado usamos una cadena
20. public int this[string s] {
21. get {
22. for (int i=0; i<10; i++) {
23. if (myArray[i].Equals(s))
24. return i;
25. }
26. return -1;
27. }
28. }
29. public static void Main() {
30. TestClass c = new TestClass();
31. // Asignamos valores a myArray
32. c[2] = “mundo”;
33. c[3] = “mundo”;
34. c[5] = “mundo”;
35. // indexador sobrecargado
36. Console.WriteLine(“indice que “ +
37. “contiene mundo es ” + c[“mundo”]);
38. }
39. }
OALP-2004 All Rights Reserved
Métodos
[[atributos]][modificadores]
tipo nombre ([parámetros]) {cuerpo}
Se recomienda usar la convención de nombres
de Pascal
Si lo que se desea es un procedimiento, el tipo
de retorno es void
Un método que hace override puede ser
declarado como sealed
La firma de un método está compuesta de su
nombre y su lista de parámetros
Un método se puede sobrecargar variando el
número o el tipo de sus parámetros
OALP-2004 All Rights Reserved
Modificadores Válidos de Métodos
new
abstract
static
override
virtual
sealed
Modificadores de acceso
OALP-2004 All Rights Reserved
Uso de params
Permite utilizar arreglos unidimensionales
como listas de parámetros de tamaño
variable
No forma parte de la firma de un método
Sólo puede usarse una por método
Si un método tiene más de un parámetro,
params debe declararse de último
Si lo que se desea es una lista de tamaño
y tipo variable, utilizar params object []
OALP-2004 All Rights Reserved
Uso de params - Ejemplo
1. using System;
2. class Test {
3. public void DisplayVals(params int[] intVals) {
4. for (int i = 0; i < intVals.Length; i++) {
5. Console.WriteLine(“DisplayVals {0}”, intVals[i]);
6. }
7. }
8. static void Main() {
9. Test t = new Test();
10. t.DisplayVals(1,2,3,4,5);
11. int [] explicitArray = new int[5] {6,7,8,9,10};
12. t.DisplayVals(explicitArray);
13. Console.ReadLine();
14. }
15. }
OALP-2004 All Rights Reserved
Parámetros por Referencia
Los tipos referencia siempre se pasan por referencia
Por defecto, los tipos valor siempre se pasan por valor
Se puede usar el modificador de parámetro ref para
pasar tipos valor por referencia
También, se puede usar el modificador de parámetro
out para los casos en los que se desea pasar un
parámetro por referencia sin tener que inicializarlo
primero
Si un parámetro es declarado ref, debe asignársele un
valor antes del método. Si es declarado out, debe
asignársele un valor dentro del método
Típicamente, se utiliza para “retornar” valores múltiples
desde un método
OALP-2004 All Rights Reserved
1. public class Test {
2. public static void Main() {
3. int a = 0; // a es inicializado
4. Test.DoSomething(ref a);
5. System.Console.WriteLine(a);
6. }
7. static void DoSomething(ref int y) {
8. y = 42;
9. }
10. }
1. public class Test {
2. public static void Main() {
3. int a; // a no es inicializado
4. Test.DoSomething(out a);
5. System.Console.WriteLine(a);
6. }
7. static void DoSomething(out int y) {
8. y = 42;
9. }
10. }
Parámetros por Referencia - Ejemplo
OALP-2004 All Rights Reserved
ORGANIZACIÓN
OALP-2004 All Rights Reserved
Espacios de Nombres
Una forma de organizar elementos e
identificarlos de manera única
Evita el riesgo de colisiones de nombres
Dos espacios de nombres pueden
contener la misma clase
Pueden anidarse
Dentro de éstos pueden definirse alias
OALP-2004 All Rights Reserved
Espacios de Nombres - Ejemplo
1. namespace TutorialCSharp {
2. namespace TutorialCSharpTest {
3. using System;
4. using C = System.Console; // definición de alias
5. public class Tester {
6. public static int Main() {
7. for (int i=0;i<10;i++)
8. C.WriteLine(“i: {0}”,i); // uso de alias
9. return 0;
10. }
11. }
12. }
13. }
El nombre completo de la clase Tester es:
TutorialCSharp.TutorialCSharpTest.Tester
OALP-2004 All Rights Reserved
Son la unidad básica de reutilización, versiones,
seguridad y despliegue en .NET
Se trata de una colección de archivos que aparecen
como un sólo archivo .dll o .exe
Además de tener una colección de clases y métodos,
también contienen otros recursos como archivos con
imágenes, definiciones de tipos para cada clase definida
y meta-datos sobre el código y los datos
Consisten de uno o más módulos, con un sólo punto de
entrada: DLLMain, WinMain o Main
Se cargan sobre demanda, y nunca son cargados si no
se necesitan
Ensamblajes
OALP-2004 All Rights Reserved
Meta-datos
Información almacenada que especifica los tipos y
métodos del ensamblaje, describiendo por completo el
contenido de cada módulo: los ensamblajes son auto-
descriptivos
Seguridad
Forman un límite de seguridad al limitar el alcance de
los tipos que contienen: la definición de un tipo no puede
cruzar dos ensamblajes
Versiones
Tienen un número de versión que se refiere al contenido
de un sólo ensamblaje. Todos los tipos y recursos
dentro del ensamblaje cambian de versión juntos. Son
de la forma mayor:menor:construcción:revisión
Ensamblajes
OALP-2004 All Rights Reserved
Como parte de sus meta-datos, cada ensamblaje tiene un
manifiesto
Describe qué hay en el ensamblaje: información de identificación
(nombre, versión, etc.), una lista de tipos y recursos, un mapa que
conecta los tipos públicos con el código que los implementa, y una
lista de los ensamblajes referenciados por este ensamblaje
Pueden examinarse ejecutando un des-ensamblador, (Ej. ildasm)
sobre un ensamblaje
Incluye un código de hash que identifica cada módulo y garantiza
que cuando un programa se ejecute, sólo se cargue la versión
adecuada de un módulo
A su vez, cada módulo tiene su propio manifiesto, separado del
manifiesto del ensamblaje
Las referencias a otros ensamblajes incluyen el nombre, la versión,
la cultura y opcionalmente el “originador”: firma digital del
desarrollador o compañía que proporciona el ensamblaje
Ensamblajes - Manifiestos
OALP-2004 All Rights Reserved
Un ensamblaje de un sólo módulo consiste de un sólo
archivo .dll o .exe que contiene todos los tipos e
implementaciones de la aplicación, junto con su
manifiesto
Un ensamblaje multi-módulo consiste de múltiples
archivos: 0 ó 1 .exe y 0 ó más .dll; aunque debe tener al
menos un .exe o .dll. El manifiesto reside en un archivo
aparte o puede estar en alguno de los módulos
Cuando el ensamblaje es referenciado, el entorno de
ejecución carga el archivo con el manifiesto y carga los
módulos a medida que vaya siendo necesario
Útil cuando se tiene muchos desarrolladores trabajando
en distintas partes de un mismo programa
Se crean manipulando los archivos assemblyInfo.cs,
makefile en conjunto con las herramientas nmake y csc
Ensamblajes - Multi-Módulo
OALP-2004 All Rights Reserved
Diseñados para ser usados por una sola
aplicación
Por defecto, los ensamblajes son privados
Los archivos son mantenidos en un mismo
directorio (y sus subdirectorios), nada más
depende de ellos y se pueden “instalar” en
otra máquina copiándolos directamente
Puede tener cualquier nombre, puesto que
es un nombre local
Ensamblajes - Privados
OALP-2004 All Rights Reserved
Diseñados para ser compartidos entre muchas
aplicaciones
Útil cuando se tienen componentes genéricos que van a
ser usados por varios programas
Deben cumplir tres condiciones:
Tener un nombre “fuerte” : una firma digital usando sn; garantiza
que sea globalmente único, permite verificar al desarrollador y
detectar alteraciones
Tener información sobre su versión: Los ensamblajes son
identificados por su nombre y su versión; varias versiones de un
mismo ensamblaje pueden convivir
Situarse en el Caché de Ensamblajes Global (GAC), un área del
sistema de archivos reservada para almacenar ensamblajes
compartidos
Ensamblajes - Compartidos

Más contenido relacionado

Similar a C# oop

Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1mellcv
 
Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Hack '
 
Patrones de diseño de software facade e iterator
Patrones de diseño de software facade e iteratorPatrones de diseño de software facade e iterator
Patrones de diseño de software facade e iteratorPietro Doninelli
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02Krizztiina Pacheko
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosAntonio Palomares Sender
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)Manuel Ch.
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Sergio Sanchez
 
Introducción a la Programaciónen Java
Introducción a la Programaciónen JavaIntroducción a la Programaciónen Java
Introducción a la Programaciónen Javasantosisidrorivera
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Renny Batista
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnetjhordy2000
 
Elementos de una clase
Elementos de una claseElementos de una clase
Elementos de una claseIsaias Toledo
 

Similar a C# oop (20)

Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1
 
Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]
 
Patrones de diseño de software facade e iterator
Patrones de diseño de software facade e iteratorPatrones de diseño de software facade e iterator
Patrones de diseño de software facade e iterator
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
 
INTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVAINTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVA
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetos
 
Transparencias_Patrones.ppt
Transparencias_Patrones.pptTransparencias_Patrones.ppt
Transparencias_Patrones.ppt
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
 
Semana 3 Herencia en Java
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en Java
 
Introducción a la Programaciónen Java
Introducción a la Programaciónen JavaIntroducción a la Programaciónen Java
Introducción a la Programaciónen Java
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
 
Csharp
CsharpCsharp
Csharp
 
Unidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIASUnidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIAS
 
Clase 4 java 2011
Clase 4 java 2011Clase 4 java 2011
Clase 4 java 2011
 
Clase 4 JAVA 2012
Clase 4 JAVA 2012Clase 4 JAVA 2012
Clase 4 JAVA 2012
 
Elementos de una clase
Elementos de una claseElementos de una clase
Elementos de una clase
 

Más de Ronald Rios Contreras (7)

Blogs
BlogsBlogs
Blogs
 
Abancay
AbancayAbancay
Abancay
 
Manual de windows 7
Manual de windows 7Manual de windows 7
Manual de windows 7
 
Manual de twitter
Manual de twitterManual de twitter
Manual de twitter
 
Manual de facebook
Manual de facebookManual de facebook
Manual de facebook
 
Tutorial word
Tutorial wordTutorial word
Tutorial word
 
Los proyectos sap r
Los proyectos sap rLos proyectos sap r
Los proyectos sap r
 

Último

Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicaGianninaValeskaContr
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsxJuanpm27
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfvictorbeltuce
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 

Último (20)

Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básica
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
recursos naturales america cuarto basico
recursos naturales america cuarto basicorecursos naturales america cuarto basico
recursos naturales america cuarto basico
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
La luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luzLa luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luz
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 

C# oop

  • 1. Tutorial de C# Programación OO Por: Óscar López, M.Sc. olopez@uniandino.com.co
  • 2. OALP-2004 All Rights Reserved ¡Hola Mundo! 1. using System; 2. namespace HolaMundo { 3. /// <summary> 4. /// Summary description for Hola. 5. /// </summary> 6. class Hola { 7. /// <summary> 8. /// The main entry point for the application. 9. /// </summary> 10. [STAThread] 11. static void Main() { 12. Console.WriteLine(“¡Hola Mundo!”); 13. } 14. 15. } 16. }
  • 3. OALP-2004 All Rights Reserved CREACIÓN DE OBJETOS
  • 4. OALP-2004 All Rights Reserved Clases - Roles y Funciones Generador de nuevos objetos Descripción de la representación de sus instancias Descripción del protocolo de mensajes de sus instancias Elemento de la descripción de la taxonomía de un objeto Un medio para implementar programación diferencial Repositorio de métodos para recibir mensajes Artefacto para actualizar muchos objetos cuando ocurre un cambio Conjunto de todas las instancias de una clase
  • 5. OALP-2004 All Rights Reserved Clases - Definición [[atributos]] [modificadores] class identificador [: base,] {cuerpo clase} • Atributos: anotaciones usadas para proporcionar meta- datos sobre la clase • Identificador: nombre, notación de Pascal • Base: Clase, Clase Abstracta, Interfaz(ces). Atención: sólo una clase, y las interfaces van al final
  • 6. OALP-2004 All Rights Reserved Modificador Comentario new Sólo aplica para clases anidadas, las “esconde” abstract Declara la clase como abstracta internal Declara una clase anidada sealed Declara la clase como sellada Modificadores de Clase
  • 7. OALP-2004 All Rights Reserved Modificador Comentario public Sin restricciones. Visible desde cualquier método de cualquier clase private Sólo es visible desde los métodos de la misma clase protected Visible desde los métodos de una clase y todas sus sub-clases internal Visible desde los métodos de todas las clases dentro de un mismo ensamblaje protected internal Visible desde los métodos de una clase, sus sub-clases, y todas las clases en su mismo ensamblaje Modificadores de Acceso
  • 8. OALP-2004 All Rights Reserved Categoría Modificadores Aplicables Acceso por Defecto espacios de nombres (implícito) public public clases, interfaces, estructuras public, internal internal miembros de clase (incluyendo tipos anidados) public, protected, internal, protected internal, private private miembros de estructura public, internal, private private miembros de interfaz (implícito) public public miembros de enumeración (implícito) public public Aplicabilidad de Modificadores de Acceso
  • 9. OALP-2004 All Rights Reserved Instanciación - Palabras Clave new crea nuevas instancias de una clase o una estructura this referencia a la instancia actual de un objeto base referencia a la super-clase de un objeto
  • 10. OALP-2004 All Rights Reserved Constructores de Instancia El nombre del constructor debe ser el mismo del nombre de la clase No tienen un tipo de retorno Si no se especifica, se crea un constructor por defecto Los constructores se pueden sobrecargar y pueden llamar a otros constructores dentro de la misma clase o en una super- clase
  • 11. OALP-2004 All Rights Reserved Constructores de Instancia - Ejemplo 1. public class Window { 2. int top, left; 3. 4. public Window(int top, int left) { 5. this.top = top; 6. this.left = left; 7. } 8. } 9. public class ListBox : Window { 10. string mListBoxContents; 11. ListBox(int top, int left, string theContents) 12. : base(top, left) { 13. mListBoxContents = theContents; 14. } 15. ListBox(int top, int left) 16. : this(top, left, “”) { 17. } 18. }
  • 12. OALP-2004 All Rights Reserved Constructores Estáticos No puede tener parámetros No puede tener modificadores de acceso No puede ser llamado explícitamente Es llamado una sola vez, antes de crear la primera instancia 1. public class Window { 2. static GLibrary gLib; 3. static Window() { 4. gLib = getLib(); 5. } 6. }
  • 13. OALP-2004 All Rights Reserved Tipo Valor por Defecto Numérico (int, long, etc.) 0 bool false char ‘0’ enum 0 referencia null int num = -1; Inicializadores, Valores por Defecto
  • 14. OALP-2004 All Rights Reserved ¡Recolector de Basura! Normalmente no son necesarios, sólo si se deben liberar recursos “costosos” Los destructores se llaman cuando un objeto es recolectado, es un proceso no-determinístico No se pueden llamar explícitamente (pero un objeto se puede “marcar” para ser recolectado asignándole null) 1. ~Window() { 2. gLib.release(); 3. } 1. protected override void Finalize() { 2. try { 3. gLib.release(); 4. } 5. finally { 6. base.Finalize(); 7. } 8. } Destructores
  • 15. OALP-2004 All Rights Reserved Implementando IDispose 1. using System; 2. 3. class TestDispose : IDisposable { 4. bool isDisposed = false; 5. protected virtual void MyDispose() { 6. if ( !isDisposed ) { // sólo limpiar una vez! 7. Console.WriteLine(“Limpiando...”); // realizar la limpieza 8. } 9. this.isDisposed = true; 10. } 11. public void Dispose() { 12. MyDispose(); 13. // decirle al recolector que no debe llamar al destructor 14. GC.SuppressFinalize(this); 15. } 16. ~TestDispose() { 17. MyDispose(); 18. } 19. }
  • 16. OALP-2004 All Rights Reserved Declaración using Debido a que no hay seguridad de que Dispose() sea llamado, C# proporciona la declaración using, la cual garantiza que Dispose() sea llamado automáticamente cuando se llega al corchete que cierra la declaración 1. Font theFont = new Font(“Arial”, 10.0f); 2. using (theFont) { 3. // usar theFont 4. } // el compilador invocará Dispose() en theFont
  • 17. OALP-2004 All Rights Reserved Clases Anidadas Típicamente, existe sólo para servir a la clase que la contiene, como una clase auxiliar Puede ocultarse de otras clases si se declara como privada Una clase anidada tiene acceso a todos los miembros de la clase que la contiene, aún los privados Puede acceder a todos los miembros externos que puedan ser accedidos por la clase que la contiene
  • 18. OALP-2004 All Rights Reserved Clases Anidadas - Ejemplo 1. public class Fraction { 2. internal class FractionPaint { 3. public void Draw(Fraction f) { 4. Console.WriteLine(“Drawing Fraction…”); 5. } 6. } 7. } Fraction f1 = new Fraction(3,4); Fraction.FractionArtist fp = new Fraction.FractionPaint(); fp.Draw(f1);
  • 19. OALP-2004 All Rights Reserved Estructuras [[atributos]] [modificadores acceso] struct identificador [: interfaz,] {cuerpo estructura} Otro tipo de datos definido por el usuario Una alternativa “liviana” a las clases (menos memoria, menos funcionalidad) Pueden tener: constructores, propiedades, métodos, campos, operadores, tipos anidados y propiedades indexadas; pueden implementar interfaces; se les reserva memoria al declararlas No soportan destructores ni herencia, no pueden tener un constructor sin parámetros ni usar inicializadores; sus “instancias” son de tipo valor (a diferencia de las instancias de una clase, que son de tipo referencia)
  • 20. OALP-2004 All Rights Reserved Estructuras - ¿Para Qué? Deberían usarse para tipos pequeños, simples, con comportamiento y características similares a las de los tipos básicos. Ej.: un Punto con coordenadas (x, y) Las operaciones sobre estructuras pueden ser más rápidas en algunos casos, pero las asignaciones son más costosas Encapsular los miembros haciéndolos privados y accediéndolos usando propiedades o métodos es exagerar … en este caso acceder directamente al estado de una estructura es más razonable Es más eficiente usar estructuras en Arreglos que en Colecciones
  • 21. OALP-2004 All Rights Reserved Estructuras - Ejemplo 1. using System; 2. public struct Point { 3. int x, y; 4. public Point(int xCoordinate, int yCoordinate) { 5. x = xCoordinate; 6. y = yCoordinate; 7. } 8. } 9. public class Tester { 10. static void Main() { 11. Point p1 = new Point(300,200); 12. Point p2; 13. p2.x = 640; 14. p2.y = 480; // No olvidar asignar todos los campos 15. } 16. }
  • 22. OALP-2004 All Rights Reserved COMPARTIR INFORMACIÓN
  • 23. OALP-2004 All Rights Reserved Herencia En C#, una clase sólo puede tener una super- clase, y todas las clases heredan de System.Object Una sub-clase hereda todos los miembros visibles de su super-clase, y son tratados como si hubieran sido definidos en la sub-clase Las siguientes clases no pueden ser extendidas: System.Array System.Delegate System.Enum System.ValueType
  • 24. OALP-2004 All Rights Reserved Método Comentario public virtual string ToString() representación textual del objeto public virtual int GetHashCode() hash del objeto public virtual bool Equals(object a) prueba igualdad entre objetos public static bool Equals(object a,object b) prueba valores nulos, luego igualdad public static bool ReferenceEquals(object a,object b) prueba identidad public Type GetType() instancia de Type del objeto protected object MemberwiseClone() copia superficial protected virtual Finalize() limpieza Métodos de System.Object
  • 25. OALP-2004 All Rights Reserved Polimorfismo Capacidad de usar “muchas formas” de un mismo tipo Un miembro debe ser declarado explícitamente como virtual para poder declarar override sobre éste en una sub-clase Un miembro virtual no puede ser declarado como: static, abstract, override o private Sólo los siguientes miembros pueden ser declarados como virtual: métodos, propiedades y propiedades indexadas
  • 26. OALP-2004 All Rights Reserved Uso de virtual y override Una sub-clase no puede hacer override de los miembros privados de una super-clase Si una sub-clase tiene un método con la misma firma de un método privado en una super-clase, no se considera un override El que un miembro de una clase sea declarado como virtual no obliga a que sus (posibles) sub-clases deban hacer override de éste
  • 27. OALP-2004 All Rights Reserved Escondiendo Miembros con new new como modificador, al crear un nuevo miembro de clase (método, campo, constante, propiedad, tipo) que “esconde” el miembro heredado de una super-clase Una sub-clase es libre de implementar su propia versión de un miembro de una super-clase. La palabra clave new indica que la sub-clase, intencionalmente, ha escondido y reemplazado un miembro de su super-clase
  • 28. OALP-2004 All Rights Reserved Escondiendo Miembros - Ejemplo 1. using System; 2. class A { 3. public virtual void DoThis() { 4. Console.WriteLine(“A”); 5. } 6. } 7. class B : A { // B extiende A 8. public new void DoThis() { 9. Console.WriteLine(“B”); 10. } 11. } 12. class Test { 13. public static void Main() { 14. A temp1 = new A(); 15. temp1.DoThis(); 16. B temp2 = new B(); 17. temp2.DoThis(); 18. A temp3 = new B(); 19. temp3.DoThis(); 20. A temp4 = (A)temp2; 21. temp4.DoThis(); 22. } 23. } Cuando se usa new, el tipo de dato de la variable usada para referenciar un objeto se toma en cuenta a la hora de determinar cuál de los dos métodos invocar. Si la variable es de tipo A, no importa si la instancia a la que se refiere es de clase A o B, se llama el método DoThis() en A. No se trata de un override de B, simplemente, se lo ha “escondido”
  • 29. OALP-2004 All Rights Reserved Clases Abstractas Obligan a que las subclases implementen uno o más métodos No se pueden instanciar Si una clase tiene un solo método abstracto, ésta también debe declararse como abstracta Se antepone la palabra clave abstract a la definición de un método, no se implementa Típicamente, se encuentran en la parte superior de una jerarquía de clases
  • 30. OALP-2004 All Rights Reserved Clases Selladas Lo opuesto a una clase abstracta No permite que una clase tenga sub-clases Se antepone la palabra clave sealed a la definición de una clase Se marcan como tal para prevenir “herencia accidental” Se debería marcar como sellada una clase en donde todos sus miembros son estáticos
  • 31. OALP-2004 All Rights Reserved Interfaces [[atributos]] [modificadores acceso] interface identificador [: interfaz,] {cuerpo interfaz} Un contrato, un conjunto de capacidades ofrecidas por un objeto En C#, una interfaz puede contener métodos, propiedades, propiedades indexadas y eventos; no campos Debe detallar el tipo de retorno, el nombre y los parámetros de un método, sin especificar modificadores de acceso Una interfaz no puede ser instanciada Una clase puede implementar una o más interfaces Por convención, su nombre empieza por ‘I’
  • 32. OALP-2004 All Rights Reserved Conversiones de Interfaces - is, as IStorable isDoc = (IStorable) doc; if (doc is IStorable) IStorable isDoc = (IStorable) doc; IStorable isDoc = doc as IStorable
  • 33. OALP-2004 All Rights Reserved ¿Qué Define a un Objeto? Estado Comportamiento Identidad Eventos
  • 34. OALP-2004 All Rights Reserved Posibles Miembros de una Clase Estado Campos Constantes Campos de sólo lectura Enumeraciones Comportamiento Constructores de instancia Constructores estáticos Destructores Tipos anidados Propiedades Propiedades Indexadas Métodos Operadores Delegados y Eventos
  • 35. OALP-2004 All Rights Reserved Miembros de Clase y de Instancia Los siguientes miembros pueden ser declarados como estáticos, usando la palabra clave static: constructores, campos, campos de sólo lectura, propiedades, métodos, operadores, eventos Los miembros de instancia están asociados con instancias de un tipo Los miembros estáticos están asociados con una clase y no con una instancia en particular y como tal, se acceden anteponiendo el nombre de la clase y el operador ‘.’ al nombre del miembro Un miembro estático no puede ser declarado con ninguno de éstos modificadores: virtual, override, abstract
  • 36. OALP-2004 All Rights Reserved ESTADO
  • 37. OALP-2004 All Rights Reserved Campos Variable asociada a una instancia o a una clase, almacena los datos que definen las características propias de un objeto. No confundir con atributos ni con propiedades Por convención, todos los campos son privados. Si se necesita proporcionar acceso a éstos, se recomienda usar propiedades También por convención, se recomienda usar la convención “Camel” para los nombres de los campos (primera letra en minúsculas, palabras separadas por una letra mayúscula) El nombre de un campo no puede ser una palabra reservada
  • 38. OALP-2004 All Rights Reserved Constantes Representan valores que no cambian durante la ejecución del programa Se declaran usando la palabra clave const Pueden ser de tipos valor (sbyte, byte, short, ushort, int, uint, long, ulong, float, double, decimal, bool, char) y string Pueden ser variables o campos de instancia Son evaluadas en tiempo de compilación // Número de milisegundos en un día const long MS_POR_DIA = 1000*60*60*24;
  • 39. OALP-2004 All Rights Reserved Campos de Sólo Lectura Se declaran usando la palabra clave readonly Son más generales que las constantes Pueden ser de cualquier tipo que sea evaluado una y sólo una vez en tiempo de ejecución Típicamente, son inicializados al momento de cargar una clase (en el caso de campos estáticos) o al momento de inicializar una instancia (para los campos de instancia) No sólo se pueden aplicar a campos constantes: se pueden usar para datos que, una vez son asignados, son invariantes (Ej., una cédula) No confundir: un campo de sólo lectura no es inmutable; cuando se aplica a un tipo referencia, sólo impide que la referencia al objeto sea cambiada
  • 40. OALP-2004 All Rights Reserved Campos de Sólo Lectura - Ejemplo 1. using System; 2. using System.Threading; 3. public class ReadOnly { 4. int id; 5. readonly DateTime timeOfInstanceCreation = DateTime.Now; 6. static readonly DateTime timeOfClassLoad = DateTime.Now; 7. static readonly ReadOnly ro = new ReadOnly(); 8. public ReadOnly() { 9. Console.WriteLine(“Clase cargada: {0}, Instancia creada: {1}”, 10. timeOfClassLoad, timeOfInstanceCreation); 11. } 12. public static void Main() { 13. const int size = 10; 14. for (int i = 0; i < size; i++) { 15. new ReadOnly(); 16. Thread.Sleep(1000); 17. } 18. // Se puede cambiar un miembro 19. ro.id = 5; 20. Console.WriteLine(ro.id); 21. Console.ReadLine(); 22. // El compilador dice “a static readonly field cannot be assigned to” 23. // ro = new ReadOnly(); 24. } 25. }
  • 41. OALP-2004 All Rights Reserved Enumeraciones [[atributos]] [modificadores] enum identificador [: base] {lista de enumeración,} Proporcionan una alternativa al uso de constantes Permiten agrupar constante relacionadas lógicamente Son un tipo valor; consisten en un conjunto de constantes con nombre (denominadas la lista de enumeración) La base es el tipo usado “por debajo” para representar la enumeración. Puede ser cualquiera de los tipos enteros excepto char Si no se especifica una base, por defecto se utiliza int
  • 42. OALP-2004 All Rights Reserved Enumeraciones Cada elemento de una enumeración corresponde a un valor numérico. Por defecto, una enumeración empieza en 0 y cada valor siguiente aumenta una unidad respecto al anterior 1. enum algunosValores { 2. Primero, // 0 3. Segundo, // 1 4. Tercero = 20, // 20 5. Cuarto // 21 6. }
  • 43. OALP-2004 All Rights Reserved Enumeraciones - Ejemplo 1. using System; 2. class Values { 3. // declaración de la enumeración 4. enum Temperatures : int { 5. WickedCold = 0, 6. FreezingPoint = 32, 7. LightJacketWeather = 60, 8. SwimmingWeather = 72, 9. BoilingPoint = 212 10. } 11. static void Main() { 12. Console.WriteLine(“Temperatura de congelación del agua: {0}”, 13. (int) Temperatures.FreezingPoint); 14. Console.WriteLine(“Temperatura de ebullición del agua: {0}”, 15. Temperatures.BoilingPoint); 16. Console.ReadLine(); 17. } 18. }
  • 44. OALP-2004 All Rights Reserved COMPORTAMIENTO
  • 45. OALP-2004 All Rights Reserved Propiedades [modificadores] tipo identificador { get { return campo; } set { campo = value; } } Una forma muy conveniente para encapsular un campo Permite acceder a los campos usando métodos en forma transparente Recomendado seguir la convención de Pascal para los identificadores get o set son opcionales: propiedades de sólo lectura o de sólo escritura No necesariamente debe existir un campo para cada propiedad: valores derivados Pueden heredarse de manera selectiva, declarándolas como virtual
  • 46. OALP-2004 All Rights Reserved Propiedades - Ejemplo 1. using System; 2. public class TestClass { 3. private string color = “yellow”; 4. public string Color { // propiedad Color 5. get { 6. return color; 7. } 8. set { 9. color = value; 10. } 11. } 12. public static void Main() { 13. TestClass c = new TestClass(); 14. Console.WriteLine(c.Color); // get 15. c.Color = “blue”; // set 16. Console.WriteLine(c.Color); // get 17. } 18. }
  • 47. OALP-2004 All Rights Reserved Propiedades Indexadas [modificadores] tipo this [tipo argumento,] { get { ; } set { ; } } Una forma conveniente para tratar un objeto que encapsula un arreglo o una colección como si el objeto mismo fuera un arreglo Una propiedad indexada se usa para representar la lista de objetos contenidos en una clase, usando la notación objeto[índice] Puede pasarse más de un argumento entre [], y de diferentes tipos También puede ser declarado como virtual Se recomienda no poner más de una propiedad indexada por clase
  • 48. OALP-2004 All Rights Reserved Propiedades Indexadas - Ejemplo 1. using System; 2. class TestClass { 3. // este es el arreglo encapsulado 4. string[] myArray = new string[10]; 5. // constructor 6. public TestClass() { 7. for (int i=0; i<10; i++) 8. myArray[i] = “hola”; 9. } 10. // indexamos usando un entero 11. public string this[int index] { 12. get { 13. return myArray[index]; 14. } 15. set { 16. myArray[index] = value; 17. } 18. } 19. // indexador sobrecargado usamos una cadena 20. public int this[string s] { 21. get { 22. for (int i=0; i<10; i++) { 23. if (myArray[i].Equals(s)) 24. return i; 25. } 26. return -1; 27. } 28. } 29. public static void Main() { 30. TestClass c = new TestClass(); 31. // Asignamos valores a myArray 32. c[2] = “mundo”; 33. c[3] = “mundo”; 34. c[5] = “mundo”; 35. // indexador sobrecargado 36. Console.WriteLine(“indice que “ + 37. “contiene mundo es ” + c[“mundo”]); 38. } 39. }
  • 49. OALP-2004 All Rights Reserved Métodos [[atributos]][modificadores] tipo nombre ([parámetros]) {cuerpo} Se recomienda usar la convención de nombres de Pascal Si lo que se desea es un procedimiento, el tipo de retorno es void Un método que hace override puede ser declarado como sealed La firma de un método está compuesta de su nombre y su lista de parámetros Un método se puede sobrecargar variando el número o el tipo de sus parámetros
  • 50. OALP-2004 All Rights Reserved Modificadores Válidos de Métodos new abstract static override virtual sealed Modificadores de acceso
  • 51. OALP-2004 All Rights Reserved Uso de params Permite utilizar arreglos unidimensionales como listas de parámetros de tamaño variable No forma parte de la firma de un método Sólo puede usarse una por método Si un método tiene más de un parámetro, params debe declararse de último Si lo que se desea es una lista de tamaño y tipo variable, utilizar params object []
  • 52. OALP-2004 All Rights Reserved Uso de params - Ejemplo 1. using System; 2. class Test { 3. public void DisplayVals(params int[] intVals) { 4. for (int i = 0; i < intVals.Length; i++) { 5. Console.WriteLine(“DisplayVals {0}”, intVals[i]); 6. } 7. } 8. static void Main() { 9. Test t = new Test(); 10. t.DisplayVals(1,2,3,4,5); 11. int [] explicitArray = new int[5] {6,7,8,9,10}; 12. t.DisplayVals(explicitArray); 13. Console.ReadLine(); 14. } 15. }
  • 53. OALP-2004 All Rights Reserved Parámetros por Referencia Los tipos referencia siempre se pasan por referencia Por defecto, los tipos valor siempre se pasan por valor Se puede usar el modificador de parámetro ref para pasar tipos valor por referencia También, se puede usar el modificador de parámetro out para los casos en los que se desea pasar un parámetro por referencia sin tener que inicializarlo primero Si un parámetro es declarado ref, debe asignársele un valor antes del método. Si es declarado out, debe asignársele un valor dentro del método Típicamente, se utiliza para “retornar” valores múltiples desde un método
  • 54. OALP-2004 All Rights Reserved 1. public class Test { 2. public static void Main() { 3. int a = 0; // a es inicializado 4. Test.DoSomething(ref a); 5. System.Console.WriteLine(a); 6. } 7. static void DoSomething(ref int y) { 8. y = 42; 9. } 10. } 1. public class Test { 2. public static void Main() { 3. int a; // a no es inicializado 4. Test.DoSomething(out a); 5. System.Console.WriteLine(a); 6. } 7. static void DoSomething(out int y) { 8. y = 42; 9. } 10. } Parámetros por Referencia - Ejemplo
  • 55. OALP-2004 All Rights Reserved ORGANIZACIÓN
  • 56. OALP-2004 All Rights Reserved Espacios de Nombres Una forma de organizar elementos e identificarlos de manera única Evita el riesgo de colisiones de nombres Dos espacios de nombres pueden contener la misma clase Pueden anidarse Dentro de éstos pueden definirse alias
  • 57. OALP-2004 All Rights Reserved Espacios de Nombres - Ejemplo 1. namespace TutorialCSharp { 2. namespace TutorialCSharpTest { 3. using System; 4. using C = System.Console; // definición de alias 5. public class Tester { 6. public static int Main() { 7. for (int i=0;i<10;i++) 8. C.WriteLine(“i: {0}”,i); // uso de alias 9. return 0; 10. } 11. } 12. } 13. } El nombre completo de la clase Tester es: TutorialCSharp.TutorialCSharpTest.Tester
  • 58. OALP-2004 All Rights Reserved Son la unidad básica de reutilización, versiones, seguridad y despliegue en .NET Se trata de una colección de archivos que aparecen como un sólo archivo .dll o .exe Además de tener una colección de clases y métodos, también contienen otros recursos como archivos con imágenes, definiciones de tipos para cada clase definida y meta-datos sobre el código y los datos Consisten de uno o más módulos, con un sólo punto de entrada: DLLMain, WinMain o Main Se cargan sobre demanda, y nunca son cargados si no se necesitan Ensamblajes
  • 59. OALP-2004 All Rights Reserved Meta-datos Información almacenada que especifica los tipos y métodos del ensamblaje, describiendo por completo el contenido de cada módulo: los ensamblajes son auto- descriptivos Seguridad Forman un límite de seguridad al limitar el alcance de los tipos que contienen: la definición de un tipo no puede cruzar dos ensamblajes Versiones Tienen un número de versión que se refiere al contenido de un sólo ensamblaje. Todos los tipos y recursos dentro del ensamblaje cambian de versión juntos. Son de la forma mayor:menor:construcción:revisión Ensamblajes
  • 60. OALP-2004 All Rights Reserved Como parte de sus meta-datos, cada ensamblaje tiene un manifiesto Describe qué hay en el ensamblaje: información de identificación (nombre, versión, etc.), una lista de tipos y recursos, un mapa que conecta los tipos públicos con el código que los implementa, y una lista de los ensamblajes referenciados por este ensamblaje Pueden examinarse ejecutando un des-ensamblador, (Ej. ildasm) sobre un ensamblaje Incluye un código de hash que identifica cada módulo y garantiza que cuando un programa se ejecute, sólo se cargue la versión adecuada de un módulo A su vez, cada módulo tiene su propio manifiesto, separado del manifiesto del ensamblaje Las referencias a otros ensamblajes incluyen el nombre, la versión, la cultura y opcionalmente el “originador”: firma digital del desarrollador o compañía que proporciona el ensamblaje Ensamblajes - Manifiestos
  • 61. OALP-2004 All Rights Reserved Un ensamblaje de un sólo módulo consiste de un sólo archivo .dll o .exe que contiene todos los tipos e implementaciones de la aplicación, junto con su manifiesto Un ensamblaje multi-módulo consiste de múltiples archivos: 0 ó 1 .exe y 0 ó más .dll; aunque debe tener al menos un .exe o .dll. El manifiesto reside en un archivo aparte o puede estar en alguno de los módulos Cuando el ensamblaje es referenciado, el entorno de ejecución carga el archivo con el manifiesto y carga los módulos a medida que vaya siendo necesario Útil cuando se tiene muchos desarrolladores trabajando en distintas partes de un mismo programa Se crean manipulando los archivos assemblyInfo.cs, makefile en conjunto con las herramientas nmake y csc Ensamblajes - Multi-Módulo
  • 62. OALP-2004 All Rights Reserved Diseñados para ser usados por una sola aplicación Por defecto, los ensamblajes son privados Los archivos son mantenidos en un mismo directorio (y sus subdirectorios), nada más depende de ellos y se pueden “instalar” en otra máquina copiándolos directamente Puede tener cualquier nombre, puesto que es un nombre local Ensamblajes - Privados
  • 63. OALP-2004 All Rights Reserved Diseñados para ser compartidos entre muchas aplicaciones Útil cuando se tienen componentes genéricos que van a ser usados por varios programas Deben cumplir tres condiciones: Tener un nombre “fuerte” : una firma digital usando sn; garantiza que sea globalmente único, permite verificar al desarrollador y detectar alteraciones Tener información sobre su versión: Los ensamblajes son identificados por su nombre y su versión; varias versiones de un mismo ensamblaje pueden convivir Situarse en el Caché de Ensamblajes Global (GAC), un área del sistema de archivos reservada para almacenar ensamblajes compartidos Ensamblajes - Compartidos