Publicado el 24 de Enero del 2017
3.147 visualizaciones desde el 24 de Enero del 2017
189,9 KB
47 paginas
Creado hace 16a (09/12/2008)
Tema 2: Clase y objetos en C#
Programación Orientada a Objetos
Curso 2008/2009
Begoña Moros Valle
Contenido
Introducción.
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.
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 2
Clases y Objetos
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 2
Clases y Objetos
4
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 2
Clases y Objetos
5
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 2
Clases y Objetos
6
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 2
Clases y Objetos
7
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 2
Clases y Objetos
8
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 2
Clases y Objetos
9
Clase Cuenta 4/4
public class Cuenta
{ …
}
Tema 2
Clases y Objetos
10
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 2
Clases y Objetos
11
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 2
Clases y Objetos
12
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 2
Clases y Objetos
13
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 2
Clases y Objetos
14
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 2
Clases y Objetos
15
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 2
Clases y Objetos
16
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 2
Clases y Objetos
17
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 2
Clases y Objetos
18
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 2
Clases y Objetos
19
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 de ensamblado.
Un ensamblado es un componente software.
Visibilidad de los tipos: internal o public.
Por defecto, la visibilidad es internal.
Tema 2
Clases y Objetos
20
Tipos del lenguaje
Corresponden con los tipos de la plataforma
.NET: Common Type System (CTS):
Tema 2
Clases y Objetos
21
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 2
Clases y Objetos
22
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 2
Clases y Objetos
23
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 2
Clases y Objetos
24
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 2
Clases y Objetos
25
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);
La declaración de una variable (por valor o
referencia) no la inicializa.
Los objetos se crean con el operador new.
Tema 2
Clases y Objetos
26
Constructores
Declaración de constructores ( = C++ y Java):
Tienen el nombre de la clase y no declaran tipo de
retorno.
Se permite sobrecarga.
Si no se define un constructor, el compilador incluye el
constructor por defecto (vacío y sin argumentos).
public Cuenta(Persona titular, double saldo)
{
this.codigo = ++ultimoCodigo;
this.titula
Comentarios de: Tema 2: Clase y objetos en C# (0)
No hay comentarios