c sharp fundamentos

43
C SHARP CLASES Y OBJETOS

Upload: julia-ramirez

Post on 15-Jul-2015

126 views

Category:

Documents


1 download

TRANSCRIPT

C SHARPCLASES Y OBJETOS

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

• COMMON TYPE SYSTEM (CTS)

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#

TAREA

• ARCHIVO CON LOS EJERCICIOS A

REALIZAR PARA EL PRÓXIMO

MIÉRCOLES.

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