Conceptos esenciales de los Lenguaje Orientado a Objetos Prof

Anuncio
Conceptos esenciales de los Lenguaje Orientado a Objetos
Prof. Rivera
Según Bjarne Stroustrup autor del lenguaje de programación C++, para que un lenguaje sea llamado
Orientado a Objetos debe soportar tres conceptos: objetos, clases y herencia.
Aunque los lenguajes orientados a objetos se construyen sobre los conceptos de:
Encapsulación , Herencia y Polimorfismo
Objeto
Un Objeto es una instancia de un tipo de clase. La instanciación es el acto de crear una instancia de un
objeto, la instancia es un objeto, la instanciación usa el operador new, después la instanciación es posible
comunicarnos con el objeto a través de sus miembros. Un Objeto es una colección de información
relacionada y funcional.
Un objeto se compone de:

Datos que describen el objeto y Operaciones que pueden ser realizadas por el objeto
Herencia
La Herencia es la habilidad para heredar datos y funcionalidad de un objeto padre, la herencia es una
característica fundamental de un sistema orientado a objetos. A través de la herencia es posible crear o
derivar una nueva clase basada en una clase existente.
Una clase derivada es la nueva clase que está siendo creada y la clase base es una de las cuales la nueva clase
es derivada. La nueva clase derivada hereda todos los miembros de la clase base por consiguiente permite
reusar el trabajo previo. En C# se puede asumir que la clase derivada podría heredar todos los miembros de la
clase base. La herencia es un ejemplo del diseño orientado a objetos conocido como una relación "is-a" (esun), por ejemplo:
"un empleado es una persona".
Al utilizar la herencia la clase base necesita ser diseñada teniendo en mente la herencia, si los objetos no
tienen la estructura apropiada la herencia no podría funcionar correctamente. Una clase derivada no debería
requerir más ni prometer menos que su clase base sobre cualquiera de sus interfaces heredadas. Una interfaz
de clase es un contrato entre esta y los programadores que usan la clase.
upcasting, cuando un programador tiene una referencia a la clase derivada, el programador siempre puede
tratar a esa clase como si fuera la clase base. En el lenguaje común en tiempo de ejecución .NET todos los
objetos heredan de la última clase base llamada object y existe sólo una herencia simple de objetos. Un objeto
puede derivar sólo de una clase base.
Clase
Una Clase es una plantilla para un objeto. Una Clase define las operaciones que un objeto puede realizar y
define un valor que mantiene el estado del objeto, los componentes principales de una clase son: métodos,
eventos y propiedades. Una instancia de una clase es un objeto, se accede a la funcionalidad de un objeto
invocando sus métodos y accediendo a sus propiedades, eventos y campos. Una clase utiliza modificadores
para especificar la accesibilidad de la clase y sus componentes, los componentes de una clase son llamados
miembros por lo que existen diferentes tipos de miembros. Una referencia se refiere a una instancia, una
instancia es la creación de un objeto del tipo clase que se está declarando. Una clase utiliza ninguno, uno o
más constructores para ayudar a definir la instancia de una clase. Existe una palabra reservada llamada this
que sirve para hacer referencia a la clase actual en el ámbito en el cual es utilizada. Cuando se hace referencia
a una variable de instancia que tiene el mismo nombre de un parámetro se debe utilizar this.name. Al crear y
manipular objetos no es necesario administrar la memoria que estos ocupan ya que existe un mecanismo que
se encarga de esto llamado garbage collector (recolector de basura), pero es una buena práctica no olvidar
liberar los recursos.
1
Funciones Miembro
Una Función Miembro puede ser un constructor, es decir, una pieza de código que es invocada en una
instancia del objeto.
Campos Estáticos
Un Miembro Estático define miembros de un objeto que no son asociados con una instancia de clase
específica.
Un Campo Estático es el tipo más simple de un miembro estático, para declarar un campo estático se utiliza
el modificador static.
Un campo estático puede accederse a través del nombre de la clase, en vez de la instancia de la clase (objeto):
EJEMPLO 1
using System;
class MiContador{
//Campo Estático
public static int iContador = 0;
public MiContador(){
iContador++;
}
}
class App{
public static void Main(){
MiContador ContadorA = new MiContador();
Console.WriteLine(MiContador.iContador);
MiContador ContadorB = new MiContador();
Console.WriteLine(MiContador.iContador);
}
}
El ejemplo determina cuantas instancias del objeto han sido creadas.
Clase Base
Una Clase base es un objeto padre de donde se basa un nuevo trabajo.
Clase Derivada
Una Clase derivada es un objeto hijo.
Polimorfismo y Funciones Virtuales
El polimorfismo es la funcionalidad que permite a código antiguo invocar código nuevo, también permite extender el
sistema sin modificar el código existente, esto se logra sobreescribiendo o redefiniendo el código, para lo cual se utilizan
funciones virtuales y la palabra clave override.
Las funciones abstractas son automáticamente funciones virtuales, las cuales permiten al programador usar polimorfismo
para hacer su código simple.
Virtual significa que cuando una invocación a funciones miembro, el compilador debería buscar por el tipo real del objeto
y no por el tipo de la referencia, e invocar en base al tipo la función apropiada. EJEMPLO 2
using System;
public class Persona{
//Propiedades
2
public string sNombre;
public int iEdad;
//Constructor
public Persona(string sNombre, int iEdad){
this.sNombre = sNombre;
this.iEdad = iEdad;
}
//Métodos
virtual public string Tipo(){
return "Persona";
}
}
//Herencia Simple
public class Empleado : Persona{
public Empleado(string sNombre, int iEdad):base(sNombre, iEdad){}
override public string Tipo(){
return "Empleado";
}
}
class App{
//Aplicación
public static void Main()
{
Persona Boricua = new Persona("Gerado Ángeles Nava", 33);
Console.WriteLine("Boricua.sNombre : " + Boricua.sNombre);
Console.WriteLine("Boricua.iEdad : " + Boricua.iEdad);
Console.WriteLine("Boricua.Tipo : " + Boricua.Tipo());
Console.WriteLine("--- Arreglo de Objetos ---");
Empleado[] aProgramadores = new Empleado[2];
aProgramadores[0] = new Empleado("Bill Gates", 50);
aProgramadores[1] = new Empleado("Eric S. Raymond", 60);
for(int i = 0; i < aProgramadores.Length; i++){
Console.WriteLine("aProgramadores["+i+"].sNombre : " + aProgramadores[i].sNombre);
Console.WriteLine("aProgramadores[" + i + "].iEdad : " + aProgramadores[i].iEdad);
Console.WriteLine("aProgramadores[" + i + "].Tipo : " + aProgramadores[i].Tipo());
}
}
}
Cuando una función es declarada con la palabra reservada override significa que es la misma función que fue declarada en
la clase base, si la palabra reservada override se omite el compilador podría asumir que la función no está relacionada a la
función de la clase base y no despacha la función virtual (el compilador podría sugerir omitir override o agregar new) .
Cuando existe una función virtual el programador puede pasar una referencia a la clase abstracta aunque la clase derivada
y el compilador podrían escribir código para invocar la versión apropiada de la función en tiempo de ejecución.
Por ejemplo, el objeto base object tiene una función virtual llamada ToString() que convierte un objeto a string. Si se
invoca la función ToString() en un objeto que que no la tiene como versión propia, la versión de la función que es parte de
la clase object podría ser invocada.
Encapsulación y Visibilidad
Encapsulación (también llamada information hiding), habilidad de un objeto para ocultar sus datos internos o parte
interna de sus usuarios y provee una interface que hace las partes importantes del objeto accesible programáticamente. La
3
encapsulación provee los límites entre una interfaz externa y los detalles de su implementación interna. Al diseñar objetos
el programador decide que objetos son visibles al usuario y que es privado dentro del objeto, los detalles que no son
visibles al usuario son señalados para ser encapsulados en la clase.
TAREA:
A-CONTESTE LAS SIGUIENTES PREGUNTAS
1. ¿Es posible en C# que la clase derivada pueda heredar todos los miembros de la clase base? Explique su
respuesta.
2. Defina el concepto polimorfismo, constructor.
3. ¿Cuál es la función del garbage collector?
B-IMPLEMENTA EL PROGRAMA EJEMPLO 2 PARA QUE VERIFIQUE LA EDAD DE LA CLASE Persona Y
DETERMINE SI CUMPLE CON EL REQUISITO DE 65 AÑOS PARA JUBILARSE. EN TAL CASO DESPLIEGA EL
MENSAJE “NOMBRE_PERSONA+WELCOME TO THE SOCIAL SECURITY CLUB”; DE LO CONTRARIO SOLO
DESPLEGAR MENSAJE” SORRY!!”.
4
Descargar