Publicado el 14 de Enero del 2017
2.296 visualizaciones desde el 14 de Enero del 2017
271,9 KB
118 paginas
Creado hace 15a (13/12/2009)
Tema 6: Programación Orientada
a Objetos en C#
Programación Orientada a Objetos
Curso 2009/2010
Begoña Moros Valle
Contenido
Introducción.
Clases y Objetos en C#:
Módulos: Clases, Estructuras, Espacios de nombres, Ensamblados.
Tipos del lenguaje.
Definición y semántica de los operadores.
Métodos y mensajes. Paso de parámetros.
Construcción de objetos.
Herencia en C#:
Polimorfismo y ligadura.
Clase object.
Casting y Compatibilidad de tipos.
Clases abstractas.
Interfaces.
Herencia múltiple.
Genericidad.
Estrategias – Delegados.
Iteradores.
Corrección y Robustez en C#: asertos y excepciones
Tema 6
POO en C#
2
Introducción
C# es un lenguaje creado por Microsoft y
liderado por Anders Heljsberg.
Es un lenguaje orientado a objetos puro
inspirado en C++, Java, Delphi y Eiffel.
Las aplicaciones C# son ejecutadas en un
entorno controlado llamado CLR (Common
LanguageRuntime).
El lenguaje está estandarizado en ECMA e
ISO.
Actualmente está en la versión 3.0.
Tema 6
POO en C#
3
Plataforma .NET
El compilador de C# genera código
intermedio para la plataforma .NET.
El código intermedio es ejecutado por una
máquina virtual: CLR
C# es sólo uno de los lenguajes de la
plataforma .NET: C++, VB.NET, Eiffel.NET, etc.
La plataforma .NET está ligada a los sistemas
operativos Windows.
Proyecto Mono:
Implementación de .NET en otros sistemas
operativos.
Incluye un compilador para C#.
Tema 6
POO en C#
4
Clases y Objetos en C#
Clases.
Propiedades.
Visibilidad.
Espacios de
nombres.
Ensamblados.
Tipos del lenguaje.
Construcción de
objetos.
Estructuras.
Asignación y copia.
Identidad e igualdad.
Métodos y mensajes.
Paso de parámetros.
Operadores.
Instancia actual.
Método Main.
Tema 6
POO en C#
5
Clases
En C# los elementos que definen una clase
son:
Atributos, métodos y constructores ( = Java y
C++)
La declaración de una clase comparte aspectos
en común con Java y C++:
La declaración de una clase incluye la definición e
implementación ( = Java ).
Un fichero de código fuente (extensión .cs) puede
contener la declaración de varias clases ( = C++ ).
Tema 6
POO en C#
6
Clases
C# añade dos nuevos tipos de declaraciones:
Propiedades:
Representan características de los objetos que son
accedidas como si fueran atributos.
Ocultan el uso de métodos get/set.
Una propiedad puede representar un atributo calculado.
Eventos:
Notificaciones que envía un objeto a otros objetos cuando
se produce un cambio de estado significativo.
Propiedades y eventos son el soporte para el
Desarrollo de Software basado en
Componentes.
Tema 6
POO en C#
7
Clase Cuenta 1/4
public class Cuenta {
// Constante
private const int MAX_OPERACIONES = 20;
// Atributo de clase
private static int ultimoCodigo = 0;
// Atributos de instancia
private int codigo;
private double saldo = 100;
private readonly Persona titular;
private EstadoCuenta estado;
private double[] ultimasOperaciones;
…
Tema 6
POO en C#
8
Clase Cuenta 2/4
public class Cuenta
{
…
// Constructor
public Cuenta(Persona titular, double saldo)
{
this.codigo = ++ultimoCodigo;
this.titular = titular;
this.saldo = saldo;
estado = EstadoCuenta.OPERATIVA;
ultimasOperaciones = new double[MAX_OPERACIONES];
}
…
}
Tema 6
POO en C#
9
Clase Cuenta 3/4
public class Cuenta
{ …
get { return saldo; }
// Propiedades
public double Saldo
{
}
public Persona Titular
{
}
public int Codigo
{
}
get { return titular; }
get { return codigo; }
}
Tema 6
POO en C#
10
Clase Cuenta 4/4
public class Cuenta
{ …
}
Tema 6
POO en C#
11
if (cantidad <= saldo)
saldo = saldo - cantidad;
// Métodos de instancia
saldo = saldo + cantidad;
public void Ingreso(double cantidad) {
}
public void Reintegro(double cantidad){
}
// Métodos de clase
public static int GetNumeroCuentas() {
}
return ultimoCodigo;
Clases
Los miembros de una clase pueden ser de
instancia (por defecto) o de clase, utilizando el
modificador static ( = Java y C++).
Los atributos de sólo lectura se marcan
utilizando el modificador readonly (= final de
Java y const de C++):
readonly Persona titular;
Tema 6
POO en C#
12
Clases
Las constantes se declaran const (= final
static de Java y const static de C++):
private const int MAX_OPERACIONES = 20;
Está permitida la inicialización de los
atributos en la declaración ( = Java):
private double saldo = 100;
Los atributos no inicializados en la
declaración o en los constructores toman el valor
por defecto de su tipo de datos ( = Java ).
Tema 6
POO en C#
13
Propiedades
Declaración de propiedades:
public double Saldo
{
}
get { return saldo; }
Se usan como atributos, pero el acceso se
realiza invocando a métodos get/set:
Console.WriteLine("Saldo de la cuenta: " + cuenta.Saldo);
Tema 6
POO en C#
14
Propiedades
Los métodos get/set pueden realizar cálculos:
public double SaldoDolar
{
}
get { return saldo * Banco.CambioDolar(); }
El acceso a la propiedad oculta el cálculo:
Console.WriteLine("Saldo en dólares: " + cuenta.SaldoDolar );
Tema 6
POO en C#
15
Propiedades
En la definición de un método set, el
identificador value representa el valor que va
a ser asignado:
public double Saldo
{
get { return saldo; }
private set { saldo = value; }
}
Es posible indicar un nivel de visibilidad distinto
para cada uno de los métodos.
Tema 6
POO en C#
16
Propiedades
Declaración automática de propiedades:
Evitamos tener que declarar el atributo.
Los métodos get/set sólo consultan y modifican la
propiedad.
public double Saldo
{
get;
private set;
}
Tema 6
POO en C#
17
Visibilidad
El nivel de visibilidad se especifica para cada
declaración ( = Java):
public: visible para todo el código.
private: visible sólo para la clase.
protected: visibilidad para la clase y los subtipos.
internal: visibilidad para el “ensamblado”.
protected internal: visibilidad para la clase y
subtipos dentro del mismo ensamblado.
Por defecto, las declaraciones en una clase son
privadas ( = C++).
Tema 6
POO en C#
18
Espacios de nombres
Un espacio de nombres (namespace) es un
mecanismo para agrupar un conjunto de
declaraciones de tipos relacionadas ( = C++)
Evita la colisión de los nombres de
identificadores.
Se declaran con namespace y pueden estar
definidos en varios ficheros de código fuente.
Los espacios de nombres pueden estar
anidados.
Son diferentes a los paquetes de Java.
Tema 6
POO en C#
19
Espacios de nombres
Para hacer uso de un tipo declarado en un
espacio de nombre se califica su nombre:
GestionCuentas.Cuenta
Podemos indicar que se usan todas las
declaraciones de un espacio de nombres con
using.
using System;
using System.Text;
namespace GestionCuentas
{
enum EstadoCuenta { … }
class Cuenta { … }
}
Tema 6
POO en C#
20
Ensamblados
C# define un nivel de visibilidad entre los tipos
que forman parte del mismo “ensamblado”:
visibilidad internal.
Ensamblado: unidad de empaquetado de
software en la plataforma .NET
Un fichero ejecutable es un ensamblado.
Un ensamblado es un componente software.
Visibilidad de los tipos: internal o public.
Por defecto, la visibilidad es internal.
Tema 6
POO en C#
21
Tipos del lenguaje
Corresponden con los tipos de la plataforma
.NET: Common Type System (CTS):
Tema 6
POO en C#
22
Tipos del lenguaje
C# es un lenguaje orientado a objetos puro.
Todos los tipos definen objetos.
Se distinguen dos tipos de datos:
Tipos con semántica referencia: clases, interfaces,
arrays y “delegados”. Aceptan el valor null.
Tipos con semántica por valor: tipos primitivos,
enumerados y estructuras.
Por tanto, los tipos primitivos son objetos:
Podemos aplicar métodos sobre los tipos primitivos
como ToString o Equals.
Tipos: char, int, long, float, double, bool, etc.
Tema 6
POO en C#
23
Enumerados
Los enumerados son objetos con
semántica valor.
Declaración de un enumerado:
enum EstadoCuenta { OPERATIVA, INMOVILIZADA, NUMEROS_ROJOS }
Al igual que en C++, las etiquetas del
enumerado representan valores enteros.
Tema 6
POO en C#
24
Enumerados
Uso de un enumerado:
public class Cuenta
{ …
private EstadoCuenta estado;
public Cuenta(Persona titular, double saldo)
{ …
}
estado = EstadoCuenta.OPERATIVA;
Si no se inicializa un enumerado, toma como
valor por defecto la primera etiqueta.
Tema 6
POO en C#
25
Arrays
Los arrays son objetos con semántica
referencia.
Se declaran y usan igual que en Java:
public class Cuenta
{
…
private double[] ultimasOperaciones;
public Cuenta(Persona titular, double saldo)
{
…
ultimasOperaciones = new double[MAX_OPERACIONES];
}
Tema 6
POO en C#
26
Construcción de objetos
Declaración y construcción de objetos
Persona persona;
persona = new Persona("34565433", "Juan González");
Cuenta cuenta = new Cuenta(persona, 300
Comentarios de: Tema 6: Programación Orientada a Objetos en C# (0)
No hay comentarios