Subido por cofutcas

POO#.UCNE.2DA.CLASE

Anuncio
Universidad Católica Nordestana (UCNE)
Preparado por Ing. Nelson Abreu.
Febrero, 2012. San Francisco de Macorís. República Dominicana.


Objeto: es una colección de datos y una serie
de rutinas miembro, entre las que se
destacan los métodos. Representan cosas
físicas y abstractas, pero que tienen un
estado y un comportamiento.
Clases: son estructuras o plantillas que sirven
para definir un objeto. Describe la
constitución de un objeto y sirve como
plantilla para construir objetos, especificando
la interfaz pública de un objeto.





Declaración y Creación de un objeto
Un objeto es una instancia de una clase. La
creación de una instancia se conoce como
instanciación.
NombreClase nombreObjeto;
Circulo miCirculo; //declara la clase círculo
La declaración no crea el objeto. Para crear el
objeto hay que usar el operador new con el
objeto.
miCirculo = new Circulo();


public
Declara un tipo o miembro visible a todos los
programas. Es la accesibilidad por defecto
para los miembros de enumeraciones e
interfaces.
protected
Declara al miembro de una determinada clase
únicamente accesible desde dicha clase y sus
clases derivadas.


internal
Declara un tipo o miembro accesible sólo
dentro del ensamblado al que pertenece.
protected internal
Declara el miembro de una determina clase
únicamente accesible desde dicha clase y sus
clases derivadas o dentro del ensamblado al
que pertenece.

private
Declara un miembro sólo visible en su
contenedor. Es la accesibilidad por defecto
para los miembros de clases y estructuras.



Superclase
Se conoce como la clase padre y es la clase ya
existente.
Subclase
Se conoce también como clase hija, clase
derivada o clase extendida.
En C#, salvo la clase Object, cada clase tiene
una superclase y esta última es la clase padre
de todas las clases.

Una clase derivada extiende su clase padre
inmediata y puede agregar nuevos miembros
a aquellos que hereda, pero no puede borrar
la definición de un miembro heredado;
constructores y destructores no se heredan.
public class nombreClase : ClaseBase
Ejemplo:
public class Estudiante : Persona


La herencia es siempre transitiva, de modo
que una clase puede heredar características
de superclases de muchos niveles.
VENTAJAS
◦ Facilidad de modificación de clases.
◦ Evita la duplicación de estructura-código idéntico o
similar en clases diferentes.
◦ Organización de objetos en jerarquía.
◦ Adaptación de programas para trabajar en
situaciones similares pero diferentes.
class Personas
{
protected string nombre;
public Personas() { }
public Personas(string nom)
{
nombre = nom;
}
public string Nombre
{
get { return nombre; }
}
}
class Empleado : Personas
{
private string domicilio;
public Empleado(string nombre, string d) :base(nombre)
{
domicilio = d;
}
}
public Empleado()
: base("Anonimo")
{
domicilio = "--";
}
public string Domicilio
{
get { return domicilio; }
}

El lenguaje C# proporciona diversos
modificadores, tanto para las clases como
para los miembros, que puede alterar
aspectos del proceso de herencia, como:
new, virtual, abstract, static, override, sealed.

Son clases a partir de las cuales se pueden
crear instancias (objetos).

Una clase abstracta no puede ser instanciada. Es
decir, no se puede crear una instancia de una
clase abstracta usando el operador new. Tal clase
sólo se puede utilizar como una clase PADRE
para crear un nuevo tipo de objeto y no puede
llevar el modificador sealed.

La declaración de un método abstracto sólo se
puede realizar en una clase abstracta.

Un método abstract debe ser redefinido por una
subclase y por lo tanto no puede ser privado.


Son clases de las que no es posible crear
instancias; frecuentemente, están
implementadas sólo parcialmente o no están
implementadas. (definición en MSDN library).
Una clase abstracta es aquella que
forzosamente se ha de derivar si se desea
que se puedan crear objetos de la misma o
acceder a sus miembros estáticos.



Cuando se aplica a una clase indica que la
clase no se puede extender, es decir, que no
puede ser una clase padre.
También se aplica a métodos que redefinen
otros virtuales heredados para evitar que
futuras clases virtuales derivadas puedan
seguir redefiniendo el método y garantizar al
usuario que el comportamiento de la clase no
puede ser modificado por una clase posterior.
No se puede usar el modificador abstract en
una clase sealed.

El lenguaje C# está diseñado de modo que las
versiones entre las clases base y derivadas de
diferentes bibliotecas puedan evolucionar y
mantener la compatibilidad con versiones
anteriores. Esto significa, por ejemplo, que la
inserción de un nuevo miembro en una clase
base con el mismo nombre que un miembro de
una clase derivada es totalmente compatible con
C# y no lleva a un comportamiento inesperado.
También significa que una clase debe declarar
explícitamente si un método va a reemplazar a
un método heredado o si es un nuevo método
que simplemente oculta un método heredado con
un nombre similar.




Al declarar un método como virtual éste podrá
ser redefinido en la clases derivadas y
seguramente tendrán distintas implementaciones
del mismo en cada una de ellas.
Cuando el método es virtual, en lugar de
determinar la implementación del método en
tiempo de compilación, se determina en tiempo
de ejecución.
Un método virtual no puede ser declarado
privado.
El modificador override permite definir una nueva
implementación de un miembro virtual heredado
de una clase base.








C# permite que las clases derivadas contengan métodos con el mismo
nombre que los métodos de clase base.
El método de la clase base debe definirse como virtual.
Si el método de la clase derivada no va precedido de las palabras clave
new u override, el compilador emite una advertencia y el método se
comporta como si la palabra clave new estuviera presente.
Si el método de la clase derivada va precedido de la palabra clave new, el
método se define como independiente del método de la clase base.
Si el método de la clase derivada va precedido de la palabra clave
override, los objetos de la clase derivada llamarán a ese método, no al
método de la clase base.
El método de la clase base puede llamarse desde dentro de la clase
derivada con la palabra clave base.
Las palabras clave override, virtual y new también pueden aplicarse a
propiedades, indizadores y eventos.
Con la palabra clave new se indica al compilador que la definición oculta
la definición contenida en la clase base. Éste es el comportamiento
predeterminado.


Significa que los datos y las acciones se
combinan en una sola entidad y se ocultan
los detalles de la implementación. La POO
encapsula datos y métodos en objetos.
Los objetos tienen la propiedad de ocultación
de información. Que quiere decir que aunque
los objetos puedan comunicarse uno con
otros a través de interfaces bien definidas, no
pueden conocer como están implementados
otros objetos.

Es una palabra que significa “múltiples
formas” y es una de las características más
importantes de la programación orientada a
objetos. Es la propiedad de que a la misma
palabra se le asignan múltiples definiciones.

Polimorfismo Puro
◦ Se produce cuando una única función se puede
aplicar a argumentos de una variedad de tipos. En
polimorfismo puro hay una función y un número de
interpretaciones.

Polimorfismo ad hoc
◦ Se produce cuando se dispone de un número de
funciones diferentes todas representadas por el
mismo nombre. Esta propiedad también se llama
sobrecarga.


Permite que el programador implemente un
operador para que ejecute operaciones
definidas por el usuario cuando al menos uno
de los operandos sobre los que actúa sea de
la clase o estructura, definida por el usuario,
que contiene la declaración del operador
estándar.
Se utiliza un método estático, cuyo nombre
es el del operador que se va a sobrecargar
precedido de la palabra reservada operator.
public static Complejo operator+(Complejo x, Complejo y)
{
Complejo c = new Complejo(x.r + y.r, x.i+y.i);
return c;
}
public static Complejos operator +(Complejos x, int constante)
{
Complejos c = new Complejos(x.real + constante, x.img);
return c;
}
Son funciones que se pueden utilizar sin
necesidad de instanciar un objeto de clase.
https://msdn.microsoft.com/eses/library/bb882516.aspx
public static class MisExtensiones //la clase debe ser estática
{
public static double TotalBalances(this List<Estudiantes> estudiantes)
{
double total = 0;
foreach (Estudiantes est in estudiantes)
{
total += est.Balance;
}
return total;
}
}
public class Estudiantes //la clase con la que se va a trabajar
{
public string Nombre { get; set; }
public string Apellido { get; set; }
public double Balance { get; set; }
}
List<Estudiantes> estudiante = new List<Estudiantes>
{
new Estudiantes { Apellido="Abreu", Nombre="Nelson", Balance=3},
new Estudiantes { Apellido="Abreu", Nombre="Nelson", Balance=23},
new Estudiantes { Apellido="Abreu", Nombre="Nelson", Balance=3},
};
Console.WriteLine(estudiante.TotalBalances());
Descargar