3-programación orientada a objetos en csharp
DESCRIPTION
shellTRANSCRIPT
Programación Visual IProgramación Visual IIngeniería en Telemática
Ing. Julio César González MorenoIng. Julio César González [email protected]
Universidad Nacional Autónoma de NicaraguaLeón, Nicaragua
Pre-requisito: Programación Orientada a ObjetosCréditos: 4Semestre: 6to
Tema 3: Programación Orientada a Objetos en CSharp
Contenidos
El lenguaje CSharp y la orientación a objetos
Definición de sistemas orientados a objetos
Uso de variables de tipo referencia
La jerarquía de objetos
El operador is
Creación y destrucción de objetos
Bibliografía
2 / 20Programación Visual IIngeniería en Telemática
El lenguaje CSharp y la orientación a objetos (I)Instancias de nuevos objetos
Declarar una variable del tipo de una clase no crea un objeto
Para crear el objeto se debe utilizar la palabra reservada new
3 / 20Programación Visual IIngeniería en Telemática
La palabra reservada this apunta al objeto usado para la llamada al método
Es útil en caso de conflicto entre identificadores de distintos ámbitos
4 / 20Programación Visual IIngeniería en Telemática
El lenguaje CSharp y la orientación a objetos (II)Uso de la palabra reservada this
La herencia indica una relación “es un tipo de”
La herencia es una relación entre clases
Las nuevas clases añaden especialización a las existentes
5 / 20Programación Visual IIngeniería en Telemática
Definición de sistemas orientados a objetos (I)Herencia
Animal
Herbívoro
Clase base
Clases derivadas
Generalización
Especialización Carnívoro
Herencia simple
Construir una nueva clase que es derivada de una sola clase base
Herencia múltiple
Construir una nueva clase que es derivada de dos o más clases base
6 / 20Programación Visual IIngeniería en Telemática
Definición de sistemas orientados a objetos (II)Herencia simple y múltiple
Animal
Herbívoro Carnívoro
OmnívoroEl animal omnívoro
tiene dos clases base directas
Declaración de variables del tipo referencia
Liberación de variables del tipo referencia
7 / 20Programación Visual IIngeniería en Telemática
Uso de variables de tipo referencia (I)Declaración y liberación de variables referencia
Animal a = null;a = new Animal();a.patas = 4;a.tipo = “Insecto”;
a = null
Las referencias no válidas impiden el acceso a los atributos miembros de una clases así como también a sus métodos
Las referencias no válidas pueden aparecer en:
Tiempo de compilación
El compilador detecta e informa a través de Warnings la declaración o el uso de referencias no inicializadas
Tiempo de ejecución
Se genera una excepción del tipo NullPointerException
8 / 20Programación Visual IIngeniería en Telemática
Uso de variables de tipo referencia (II)Referencias no válidas
Dos referencias pueden apuntar a un mismo objeto
Se establecen dos formas de acceder al mismo objeto
¿Qué sucede si cambiamos el estado del objeto a través de una de las dos referencias disponibles?
9 / 20Programación Visual IIngeniería en Telemática
Uso de variables de tipo referencia (III)Referencias múltiples a un mismo objeto
Animal a, b = null;
a = new Animal();
a.patas = 4;a.tipo = “Insecto”;
b = a;
Console.WriteLine(“Patas: ” + Convert.ToString(a.patas) + “, tipo: ” + a.tipo);Console.WriteLine(“Patas: ” + Convert.ToString(b.patas) + “, tipo: ” + b.tipo);
Object es una clase que se encuentra en el espacio de nombre System
Sinónimo de System.Object
Es la clase base para todas las demás clases (Button, Label, Form, etc.)
La jerarquía de objetos (I)El tipo Object (I)
Object
Exception
SystemException
String MiClase
Es posible asignar a una variable del tipo object cualquier referencia
11 / 20Programación Visual IIngeniería en Telemática
La jerarquía de objetos (II)El tipo Object (II)
private void ctGradosF_KeyPress(object sender, keyPressEventArgs e){
convertir(sender);}private void ctGradosC_KeyPress(object sender, keyPressEventArgs e){
convertir(sender);}private void convertir(object objObject){
TextBox objTextBox = (TextBox)objObject;if(objTextBox == ctGradosF){
MessageBox.Show(“Hay que convertir a grados Fahrenheit”):}if(objTextBox == ctGradosC){
MessageBox.Show(“Hay que convertir a grados Centígrados”):}
}
El operador is
Devuelve true si el objeto comparado es de un tipo de clase indicada como parámetro
12 / 20Programación Visual IIngeniería en Telemática
Pajaro p;
if(j is Pajaro)p = (Pajaro) j;
elseSystem.Console.WriteLine(“El objeto j no es un objeto de la clase Pajaro”);
Paso 1: Asignación de un espacio de memoria (crea el objeto)
Se usa la palabra reservada new para asignar memoria
Paso 2: Inicialización del objeto usando un constructor
Se usa el nombre de la clase seguido por paréntesis
13 / 20Programación Visual IIngeniería en Telemática
Creación y destrucción de objetos (I)Creación de objetos
Un constructor por defecto presenta las siguientes características:
El acceso al mismo es público
Posee el mismo nombre que el de la clase
No tiene ningún tipo de valor de retorno (ni siquiera void)
No recibe ningún argumento
Se emplea para inicializar todos los atributos miembros de la clase a cero, false o null
Sintaxis del constructor
14 / 20Programación Visual IIngeniería en Telemática
Creación y destrucción de objetos (II)Uso del constructor por defecto
public class Date {//Atributos miembros de la clasepublic Date ( ) {
//Inicialización de los atributos miembros de la clase}
}
El constructor por defecto puede no ser adecuado
Generalmente no tiene asociado ningún código a ejecutar
En ese caso hay que usarlo colocando el código necesario
15 / 20Programación Visual IIngeniería en Telemática
Creación y destrucción de objetos (III)Utilización del constructor por defecto
public class Date : Form {private int dia, mes, anyo;public Date ( ) {
initialComponent();}
}
public class Date : Form {private int dia, mes, anyo;public Date ( ) {
InitialComponent();dia = 5;mes = 9;anyo = 2011;
}}
Los constructores pueden ser considerados como métodos y pueden estar sobrecargados dentro de una misma clase
Existen en el mismo ámbito, poseen el mismo nombre, pero poseen distintos parámetros
Permite inicializar objetos de distintas maneras
Problema
Si se escribe un constructor para una clase (diferente al constructor por omisión), el compilador no creará un constructor por defecto
Solución
Utilizar para la creación de los objetos el nuevo constructor escrito recientemente
Crear, a parte del constructor ya existente, un constructor por defecto
16 / 20Programación Visual IIngeniería en Telemática
Creación y destrucción de objetos (IV)Sobrecarga de constructores
17 / 20
Programación Visual IIngeniería en Telemática
public class Date : Form {private int dia, mes, anyo;public Date ( ) {
initialComponent();}public Date (int iDia, int iMes, int iAnyo ) {
InitialComponent();dia = iDia;mes = iMes;anyo = iAnyo;
}}
Creación y destrucción de objetos (V)Sobrecarga de constructores - Ejemplo
Creación de objetos
Se usa new para asignar memoria
Se usa un constructor para inicializar un objeto en esa memoria
Uso de objetos
Llamadas a métodos, utilización de atributos y propiedades
Destrucción de objetos
Se desasocia la referencia del objeto en memoria
Se libera la memoria
18 / 20Programación Visual IIngeniería en Telemática
Creación y destrucción de objetos (VI)Tiempo de vida de un objeto
No es posible eliminar la memoria asignada a los objetos de forma explícita
C# no incluye un inverso de new (ej: delete, free, etc.)
C# cuenta con una herramienta denominada recolector de basura (garbage collector)
Busca objetos que no se utilizan con el fin de destruirlos, liberando así la memoria que ocupan
Todo esto se lleva a cabo de manera automática
Elimina el uso de un mecanismo explícito, así como también errores de programación frecuentes
19 / 20Programación Visual IIngeniería en Telemática
Creación y destrucción de objetos (VII)Recolector de basura
Bibliografía
C#. Curso de Programación
Fco. Javier Ceballos Sierra
RA-MA
Enciclopedia de Microsoft Visual C#, 2da edición
Fco. Javier Ceballos Sierra
RA-MA
Capítulo 4, página 81
20 / 20Programación Visual IIngeniería en Telemática