CLASES Y OBJETOS EN C#
1. MÓDULOS: CLASES, ESTRUCTURAS,
ESPACIOS DE NOMBRES,
ENSAMBLADOS
2. TIPOS DE LENGUAJE
3. DEFINICIÓN Y SEMÁNTICA DE LOS
OPERADORES
4. MÉTODOS Y MENSAJES. PASO DE
PARÁMETROS
5. CONSTRUCCIÓN DE OBJETOS
NIVELES DE ACCESO DE LAS CLASES
• PUBLIC: PERMITE ACCEDER A LAS
PARTES DE UNA CLASE DESDE FUERA
DE LA CLASE
• PRIVATE: SOLO LAS PARTES INTERNAS
DE LA CLASE PUEDEN ACCEDER A
DICHO ELEMENTO
• PROTECTED: CUANDO LA CLASE ES
HEREDADA ESTOS ELEMENTOS
PUEDEN SER ACCEDIDOS JUNTO CON
LOS PÚBLICOS
PUBLIC CLASS PERSONA
{
PUBLIC STRING PRIMERNOMBRE;
PUBLIC STRING
SEGUNDONOMBRE;
PRIVATE INT EDAD;
PROTECTED BOOLEAN
TIENEEMPLEO;
}
NIVELES DE ACCESO DE LAS CLASES
• INTERNAL: VISIBILIDAD PARA EL
ENSAMBLADO
• PROTECTED INTERNAL: VISIBILIDAD
PARA LA CLASE Y SUBTIPOS DENTRO
DEL MISMO ENSAMBLADO
ENCAPSULACIÓN DE LAS CLASES
• LA ENCAPSULACIÓN DE UNA CLASE
PERMITE SOLUCIONAR EL PROBLEMA
EN FORMA DE UNA CAJA NEGRA.
• NO NOS INTERESA COMO SE
REALIZAN LOS CÁLCULOS PERO SI LA
RESPUESTA FINAL
• MSDN: LA ENCAPSULACIÓN SIGNIFICA
QUE UN GRUPO DE PROPIEDADES,
MÉTODOS Y OTROS MIEMBROS
RELACIONADOS SE TRATAN COMO SI
FUESE UNA SOLA UNIDAD
ELEMENTOS DE UNA CLASE
• VARIABLES,
PROPIEDADES O
CAMPOS
• MÉTODOS O
FUNCIONES
• CONSTRUCTORES
• DESTRUCTORES
• EVENTOS
• CLASES ANIDADAS
PUBLIC CLASS PERSONA
{
PUBLIC PERSONA() //CONSTRUCTOR
{
PRIMERNOMBRE = “NO ASIGNADO”;
SEGUNDONOMBRE = “NO ASIGNADO”;
}
PUBLIC STRING PRIMERNOMBRE;//VARAIBLE
PUBLIC STRING SEGUNDONOMBRE;//VARAIBLE
PUBLIC STRING OBTENERNOMBRE() //METODO
{
RETURN PRIMERNOMBRE + “ ” +
SEGUNDONOMBRE;
}
}
¿QUÉ ES UNA CLASE?[LINK]
• ES UN NUEVO TIPO DE
VARIABLE QUE TIENE
PROPIEDADES Y
CARACTERÍSTICAS PROPIAS Y
ASOCIADAS ENTRE SÍ,
DISEÑADAS CADA UNA DE
ELLAS PARA ALMACENAR
CIERTO TIPO DE
INFORMACIÓN Y SOLUCIONAR
UN PROBLEMA ESPECIFICO
SIENDO ESTA (LA CLASE)
PARTE DE UN SISTEMA MAYOR
O MAS GRANDE
PUBLIC CLASS CLIENTE
{
//TIPOS, METODOS Y EVENTOS VAN
AQUI...
}
EJEMPLO
• CREEMOS UN SISTEMA DE
CLASES QUE SOLUCIONE UN
PROBLEMA PARA ENTENDER
MEJOR COMO FUNCIONA ESTO.
• SISTEMA DE CLASIFICACIÓN DE
PERSONAL (SCP). REALIZAR
CLASES QUE PERMITA
RECONOCER A UNA PERSONA
POR LAS DIFERENTES
CARACTERÍSTICAS QUE ESTA
POSEA EN SU VIDA. SALUD,
FÍSICO, MENTAL
• PARA DESARROLLAR EL EJEMPLO
PODEMOS HACERNOS LAS SIGUIENTES
PREGUNTAS
• ¿QUÉ VARIABLES SON NECESARIAS
PARA CADA CASO?
• ¿QUÉ FUNCIONES SON NECESARIAS
PARA MANTENER DICHA
INFORMACIÓN?
• ¿CUÁLES SON LOS CÁLCULOS A
REALIZAR EN CADA CASO?
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
CLASES Y OBJETOS [LINK]
• CREAR OBJETOS
• AUNQUE SE UTILIZAN A VECES
DE FORMA INTERCAMBIABLE,
UNA CLASE Y UN OBJETO SON
COSAS DIFERENTES.
• UN OBJETO ES UNA ENTIDAD
CONCRETA BASADA EN UNA
CLASE Y, A VECES, SE
DENOMINA INSTANCIA DE UNA
CLASE
• UNA CLASE DEFINE UN TIPO DE
OBJETO, PERO NO ES
PROPIAMENTE UN OBJETO
CLASES Y OBJETOS
• LOS OBJETOS SE PUEDEN CREAR CON LA
PALABRA CLAVE NEW SEGUIDA DEL
NOMBRE DE LA CLASE EN LA QUE SE
BASARÁ EL OBJETO
CLIENTE OBJETO1 = NEW CLIENTE(); //NUEVO OBJETO
CLIENTE OBJETO2; //UNA REFERENCIA A OBJETO SIN CREAR EL OBJETO
CLIENTE OBJETO3 = OBJETO1; //CREA UNA REFERENCIA ENTRE AMBOS
OBJETOS
CLASES
• EN C# LOS ELEMENTOS QUE
CONTIENE UNA CLASE SON:
• ATRIBUTOS
• MÉTODOS
• CONSTRUCTORES
• LA DECLARACIÓN DE UNA CLASE
• INCLUYE LA DEFINICIÓN E
IMPLEMENTACIÓN
• UN FICHERO DE CÓDIGO FUENTE
(EXTENSIÓN .CS) PUEDE CONTENER LA
DECLARACIÓN DE VARIAS CLASES
PUBLIC CLASS PERSONA
{
PUBLIC PERSONA()
{
NOMBRE = "NO ASIGNADO";
}
PUBLIC STRING NOMBRE;
PUBLIC VOID ASIGNANOMBRE ()
{
NOMBRE = “RAFAEL”;
}
}
CLASES
• C# AÑADE 2 NUEVOS TIPOS DE
DECLARACIONES
• PROPIEDADES
• REPRESENTAN CARACTERÍSTICAS DE
LOS OBJETOS QUE SON ACCEDIDAS
COMO SI FUERAN ATRIBUTOS
• OCULTAN EL USO DE 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
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;
CLASE CUENTA (2/4)
// CONSTRUCTOR
PUBLIC CUENTA(PERSONA TITULAR, DOUBLE SALDO)
{
THIS.CODIGO = ++ULTIMOCODIGO;
THIS.TITULAR = TITULAR;
THIS.SALDO = SALDO;
ESTADO = ESTADOCUENTA.OPERATIVA;
ULTIMASOPERACIONES = NEW DOUBLE[MAX_OPERACIONES];
}
CLASE CUENTA (3/4)// PROPIEDADES
PUBLIC DOUBLE SALDO
{
GET { RETURN SALDO; }
}
PUBLIC PERSONA TITULAR
{
GET { RETURN TITULAR; }
}
PUBLIC INT CODIGO
{
GET { RETURN CODIGO; }
}
CLASE CUENTA (4/4)
// MÉTODOS DE INSTANCIA
PUBLIC VOID INGRESO(DOUBLE CANTIDAD) {
SALDO = SALDO + CANTIDAD;
}
PUBLIC VOID REINTEGRO(DOUBLE CANTIDAD){
IF (CANTIDAD <= SALDO)
SALDO = SALDO - CANTIDAD;
}
// MÉTODOS DE CLASE
PUBLIC STATIC INT GETNUMEROCUENTAS() {
RETURN ULTIMOCODIGO;
}
} // FIN DE CLASE
CONSTANTES
• LAS CONSTANTES SE DECLARAN CONST
• PRIVATE CONST INT MAX_OPERACIONES = 20;
• ESTA PERMITIDA LA INICIALIZACIÓN DE LOS
ATRIBUTOS EN LA DECLARACIÓN
• 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
• VERIFICAR EL VALOR POR
DEFECTO DE ATRIBUTOS
NO INICIALIZADOS
• INT
• DOUBLE
• STRING
DECLARACIÓN DE PROPIEDADES
PUBLIC DOUBLE SALDO
{
GET { RETURN SALDO; }
}
CONSOLE.WRITELINE("SALDO DE LA CUENTA: " + CUENTA.SALDO);
• SE USAN COMO ATRIBUTOS PERO
EL ACCESO SE REALIZA
INVOCANDO LOS MÉTODOS GET Y
SET
PROPIEDADES
• LOS MÉTODOS GET Y SET PUEDEN REALIZAR CÁLCULOS
PUBLIC DOUBLE SALDODOLAR
{
GET { RETURN SALDO * BANCO.CAMBIODOLAR; }
}
• EL ACCESO A LA PROPIEDAD OCULTA EL CALCULO
CONSOLE.WRITELINE(“SALDO EN DÓLARES” +
CUENTA.SALDODOLAR);
PROPIEDADES
• EN LA DEFINICIÓN DE UN MÉTODO SET, EL IDENTIFICADOR “VALUE” REPRESENTA EL VALOR QUE VA A SER ASIGNADO:
PUBLIC DOUBLE _SALDO;
PUBLIC DOUBLE SALDO
{
GET { RETURN _SALDO; }
PRIVATE SET { _SALDO = VALUE; }
}
MAIN(){
DOUBLE S = SALDO;//GET
SALDO = OTROVALOR;//SET
}
• ES POSIBLE
IDENTIFICAR
UN NIVEL DE
VISIBILIDAD
DISTINTO PARA
CADA UNO DE
LOS MÉTODOS
PROPIEDADES
• TAMBIEN SE PUEDEN DECLARAR DE LA SIGUIENTE
FORMA:
PUBLIC DOUBLE SALDO { GET; PRIVATE SET;}
• EJEMPLO DE CALCULO CON PROPIEDADES
PUBLIC DOUBLE SALDOBANCO
{
GET {RETURN SALDO * BANCO.INTERES();}
}
• ES POSIBLE
IDENTIFICAR
UN NIVEL DE
VISIBILIDAD
DISTINTO PARA
CADA UNO DE
LOS MÉTODOS
ESPACIO DE NOMBRES (NAMESPACE)
• MECANISMO PARA ASOCIAR UN
CONJUNTO DE DECLARACIONES DE
UNA MANERA MUY AMPLIA COMO UN
PROYECTO COMPLETO O UN MODULO
MUY GRANDE UN PROYECTO.
• TAMBIÉN PUEDE SER USADA PARA
SEPARAR FUNCIONALIDADES DE TIPO
DE PROYECTO POR EJEMPLO:
MANEJARCONTABILIDAD.
……
USING SYSTEM.TEXT;
USING SYSTEM.THREADING.TASKS;
NAMESPACE PROYECTO1.CARPETA1
{
PUBLIC CLASS PERSONA
{
……
ESPACIO DE NOMBRES (NAMESPACE)
• UN ESPACIO DE NOMBRE SE LLAMA A
TRAVÉS DE LA PALABRA RESERVADA
USING
• PARA DECLARAR EL USO SOLO DE LAS
CLASES Y OBJETOS DE UNA CARPETA
O SUBCARPETA DEL ESPECIO DE
NOMBRE COMO SE VE EN EL EJEMPLO
……
USING SYSTEM.TEXT;
USING SYSTEM.THREADING.TASKS;
NAMESPACE PROYECTO1.CARPETA1
{
PUBLIC CLASS PERSONA
{
……
ENSAMBLADO
• EXTENSION “.DLL” UNIDAD DE
EMPAQUETADO DE SOFTWARE DE
.NET
• UNA VEZ UN PROYECTO SE
ENCUENTRA ENSAMBLADO, NO SE
PUEDE VER NI MODIFICAR SU CÓDIGO
FUENTE PERO SI SE PUEDEN UTILIZAR
SUS CLASES Y OBJETOS AHÍ
DISEÑADOS.
• UN FICHERO EJECUTABLE ES UN
ENSAMBLADO
• UN ENSAMBLADO ES UN
COMPONENTE SOFTWARE
• POR DEFECTO, LA VISIBILIDAD ES
INTERNAL
TIPOS DE 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
• LOS TIPOS PRIMITIVOS SON OBJETOS:
• PODEMOS APLICAR MÉTODOS SOBRE
LOS TIPOS PRIMITIVOS COMO
TOSTRING O EQUALS
• TIPOS: CHAR, INT, LONG, FLOAT,
DOUBLE, BOOL ENTRE OTROS.
ENUMERADOS
• DECLARACIÓN
• ENUM ESTADOCUENTA { OPERATIVA, INMOVILIZADA, NUMEROS_ROJOS }
• USO DE UN ENUMERADO:
PUBLIC CLASS CUENTA
{ …
PRIVATE ESTADOCUENTA ESTADO;
PUBLIC CUENTA(PERSONA TITULAR, DOUBLE SALDO)
{ …
ESTADO = ESTADOCUENTA.OPERATIVA;
}
ARRAYS
LOS ARRAYS SON OBJETOS CON SEMÁNTICA REFERENCIA
INT MAX_OPERACIONES = 100;
PRIVATE DOUBLE[] ULTIMASOPERACIONES;
PUBLIC CUENTA(PERSONA TITULAR, DOUBLE SALDO)
{
ULTIMASOPERACIONES = NEW DOUBLE[MAX_OPERACIONES];
}
CONSTRUCCIÓN DE OBJETOS
• DECLARACIÓN Y CONSTRUCCIÓN DE OBJETOS
• LA DECLARACIÓN DE UNA VARIABLE (POR VALOR O REFERENCIA) NO LA INICIALIZA
• LOS OBJETOS SE CREAN CON EL OPERADOR NEW
PERSONA PERSONA;
PERSONA = NEW PERSONA("34565433", "JUAN GONZÁLEZ");
CUENTA CUENTA = NEW CUENTA(PERSONA, 300);
CONSTRUCTORES
• 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 PERSONA(STRING NOMBRE, STRING APELLIDO, STRING NUMEROCUENTA){...}
• PUBLIC PERSONA(){…}
CONSTRUCTORES
• SE PUEDEN REUTILIZAR CON LA
PALABRA CLAVE THIS, JUSTO
DESPUÉS DE LA DECLARACIÓN
DE PARÁMETROSPUBLIC CUENTA(PERSONA TITULAR, DOUBLE SALDO)
{ … }
PUBLIC CUENTA(PERSONA TITULAR): THIS(TITULAR, 200)
{
}
DESTRUCTORES
• .NET INCORPORA UN
MECANISMO DE RECOLECCIÓN
DE MEMORIA DINÁMICA:
GARBAGE COLLECTOR
• SE PUEDE DECLARAR EL
MÉTODO FINALIZE() PARA
LIBERAR RECURSOS QUE
QUEDAN FUERA DEL ENTORNO
DE EJECUCIÓN
OPERADORES
• ES POSIBLE REDEFINIR DIVERSOS
OPERADORES ==, !=, <, >
• NO SE PUEDE REDEFINIR EL
OPERADOR DE ASIGNACIÓN =
• LOS OPERADORES SE DECLARAN
COMO MÉTODOS(FUNCIONES) DE
CLASE
• SE UTILIZA COMO NOMBRE DE
MÉTODO OPERATOR SEGUIDO
DEL NOMBRE DE MÉTODO:
• OPERATOR==, OPERATOR<
PUBLIC STATIC BOOL OPERATOR> (C C1, C C2)
{
RETURN (C1.SALDO > C.SALDO);
}
C C1 = NEW C (PERSONA, 100);
C C2 = NEW C (PERSONA, 200);
CONSOLE.WRITELINE (C1 > C2); // FALSE
OPERADORES IMPLICITOS
C# NO PERMITE DEFINIR EL OPERADOR =, PERO OFRECE LA
ALTERNATIVA DE CREAR OPERADORES IMPLÍCITOS
// A PARTIR DE UNA PERSONA CREA UNA CUENTA
PUBLIC STATIC IMPLICIT OPERATOR CUENTA (PERSONA TITULAR)
{
RETURN NEW CUENTA(TITULAR, 500);
}
OPERADORES IMPLICITOS
// SI ES ASIGNADO A UN DOUBLE, SE TOMA EL SALDO
PUBLIC STATIC IMPLICIT OPERATOR DOUBLE (CUENTA CUENTA)
{
RETURN CUENTA.SALDO;
}
PASO DE PARAMETROS: VALOR, REFERENCIA, SALIDA
VOID METODO(INT VALOR, REF INT REFERENCIA, OUT INT SALIDA)
{
VALOR++; // SE INCREMENTA LA COPIA LOCAL
REFERENCIA++; // SE INCREMENTA EL PARÁMETRO REAL
SALIDA = 1; // ES OBLIGATORIO ASIGNAR UN VALOR
// ANTES DE USARLO
}
PASO DE PARAMETROS: VALOR, REFERENCIA, SALIDA
INT INTVALOR = 3;
INT INTREFERENCIA = 3;
INT INTSALIDA;
CUENTA.METODO(INTVALOR, REF INTREFERENCIA, OUT INTSALIDA);
CONSOLE.WRITELINE("POR VALOR = " + INTVALOR); // 3
CONSOLE.WRITELINE("POR REFERENCIA = " + INTREFERENCIA); // 4
CONSOLE.WRITELINE("SALIDA = " + INTSALIDA); // 1
SE UTILIZA COMUNMENTE CUANDO SE QUIERE QUE UNA FUNCION RETORNE MAS
DE UNA VARIABLE.
PASO DE OBJETOS COMO PARAMETROS
PUBLIC VOID TRANSFERENCIA (CUENTA EMISOR, CUENTA RECEPTOR, DOUBLE CANTIDAD)
{
// CAMBIA EL ESTADO DE LOS PARÁMETROS REALES
EMISOR.REINTEGRO(CANTIDAD);
RECEPTOR.INGRESO(CANTIDAD);
// NO SE VE AFECTADO EL PARÁMETRO REAL
RECEPTOR = NULL;//A MENOS QUE SE PASE EL PARÁMETRO POR REFERENCIA
}
HISTORIA
• 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 LANGUAGE RUNTIME)
• EL LENGUAJE ESTÁ ESTANDARIZADO EN ECMA E
ISO
• ACTUALMENTE ESTÁ EN LA VERSIÓN 3.0
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#
REFERENCIAS
• CLASES Y OBJETOS, MODIFICADORES, NIVELES DE ACCESO
HTTP://MSDN.MICROSOFT.COM/ES-ES/LIBRARY/DD460654.ASPX
• CLASES
HTTP://MSDN.MICROSOFT.COM/ES-ES/LIBRARY/X9AFC042.ASPX