Programación Orientada a objetos C#
¿Qué es C#?
C# o C Sharp es un
lenguaje de programación que está incluido en la Plataforma .NET y corre en el
Lenguaje Común en Tiempo de Ejecución (CLR, Common Language Runtime). El primer
lenguaje en importancia para el CLR es C#, mucho de lo que soporta la
Plataforma .NET está escrito en C#.
1. 1. OBJETO
Una clase que se ha cargado en la memoria se
denomina objeto o instancia. Se crea un objeto de una clase utilizando la
palabra clave de C# new.
Para poner entender aquello, se crea una
instancia de la clase para crear un objeto, como el siguiente sintaxis:
Clase Objeto;
Objeto= new Clase ();
Clase Objeto= new Clase ();
2. 2. CLASE
Una clase es básicamente un plano para un
tipo de datos personalizado. Cuando se define una clase, se utiliza cargándola
en la memoria.
Los miembros de una clase pueden ser:
Métodos: Acciones que puede realizar
Propiedades: Características que se pueden leer y, a
veces, modificar
Eventos: Notificaciones y/o eventos que produce
cuando se realiza una acción concreta.
Atributos: Variables internas y constantes
Un claro ejemplo podría ser;
3. 3. RELACIÓN ENTRE CLASE Y OBJETO
Algorítmicamente, las clases son
descripciones netamente estáticas o plantillas que describen objetos. Su rol es
definir nuevos tipos conformados por atributos y operaciones. Por el contrario,
los objetos son instancias particulares de una clase. Las clases son una
especie de molde de fábrica, en base al cual son construidos los objetos.
4. 4. MÉTODO
·
Al
igual que en Java y C++, los métodos definidos en una clase son los mensajes
aplicables sobre los objetos de la clase.
·
Está
permitida la sobrecarga de métodos.
·
La
aplicación de métodos y el acceso a los miembros de un objeto se realiza
siempre utilizando la notación punto “.”
ü cuenta.Ingreso(200);
// Referencia
ü punto.Desplaza(2,3);
// Valor
· Si no se indica el objeto receptor, la
llamada se realiza sobre la instancia actual.
4 4.1 CREACIÓN DE OBJETOS Y MÉTODOS CONSTRUCTORES
Crear
Objetos:
Aunque a veces se usan indistintamente, una
clase y un objeto son cosas diferentes. Una clase define un tipo de objeto,
pero no es un objeto en sí. Un objeto es una entidad concreta basada en una
clase y, a veces, se conoce como una instancia de una clase.
Los objetos se pueden crear usando la palabra
clave new, seguida del nombre de la clase en la que se basará el objeto, como en
este ejemplo:
Customer object1 = new Customer ();
Cuando se crea una instancia de una clase, se
vuelve a pasar al programador una referencia al objeto. En el ejemplo anterior,
object1 es una referencia a un objeto que se basa en Customer. Esta referencia
apunta al objeto nuevo, pero no contiene los datos del objeto. De hecho, puede
crear una referencia de objeto sin tener que crear ningún objeto:
Customer object2;
No se recomienda crear referencias de objeto
como esta, que no hace referencia a ningún objeto, ya que, si se intenta
obtener acceso a un objeto a través de este tipo de referencia, se producirá un
error en tiempo de ejecución. Pero dicha referencia puede haberse creado para hacer
referencia a un objeto, ya sea creando un nuevo objeto o asignándola a un
objeto existente, como en el siguiente codigo:
Customer object3 = new
Customer();
Customer object4 = object3;
|
Este código crea dos referencias de objeto
que hacen referencia al mismo objeto. Por lo tanto, los cambios efectuados en
el objeto mediante object3 se reflejarán en los usos posteriores de object4.
Crear
Constructor:
Un constructor es un método cuyo nombre es
igual que el nombre de su tipo. Su firma del método incluye solo el nombre del
método y su lista de parámetros; no incluye un tipo de valor devuelto. En el
ejemplo siguiente se muestra el constructor de una clase denominada Person.
public class Person
{
private string last;
private string first;
public Person(string lastName, string
firstName)
{
last = lastName;
first = firstName;
}
// Remaining implementation of Person class.
}
|
Crear
constructores estáticos:
|
En los ejemplos anteriores se han mostrado constructores de instancia, que crean un objeto nuevo. Una clase o struct también puede tener un constructor estático, que inicializa los miembros estáticos del tipo. Los constructores estáticos no tienen parámetros. Si no proporciona un constructor estático para inicializar los campos estáticos, el compilador de C# proporcionará un constructor estático predeterminado que inicializa los campos en su valor predeterminado como se muestra en la Tabla de valores predeterminados.
En el ejemplo siguiente se usa un constructor
estático para inicializar un campo estático.
public class Adult : Person
{
private static int minimumAge;
public Adult(string lastName, string
firstName) : base(lastName, firstName)
{ }
static Adult()
{
minimumAge = 18;
}
// Remaining implementation of Adult class.
}
También puede definir un constructor estático con una definición de
cuerpo de expresión, como se muestra en el ejemplo siguiente.
public class Child : Person
{
private static int maximumAge;
public Child(string lastName, string firstName)
: base(lastName, firstName)
{ }
static Child() => maximumAge = 18;
// Remaining implementation of Child class.
}
|
4 4.2 MÉTODO DE DESTRUCTORES DE OBJETOS
- Los finalizadores no se pueden definir en structs. Solo se usan con clases.
- Una clase solo puede tener un finalizador.
- Los finalizadores no se pueden heredar ni sobrecargar.
- No se puede llamar a los finalizadores. Se invocan automáticamente.
- Un finalizador no permite modificadores ni tiene parámetros}
{
~Car()
// destructor
{
// cleanup statements...
}
}
Un finalizador también puede implementarse como una definición de cuerpo
de expresión, como se muestra en el ejemplo siguiente.
using System;
public class Destroyer
{
public override string ToString() =>
GetType().Name;
~Destroyer() => Console.WriteLine($"The
{ToString()} destructor is executing.");
}
|
El finalizador llama implícitamente a Finalize en
la clase base del objeto. Por lo tanto, una llamada a un finalizador se
convierte implícitamente al siguiente código:
protected override void
Finalize()
{
try
{
// Cleanup statements...
}
finally
{
base.Finalize();
}
}
Esto significa que se realizan llamadas al método finalice de
manera recursiva para todas las instancias de la cadena de herencia, desde la
más a la menos derivada.
5 5. MENSAJE
Mensaje.- Orden que se envía al objeto para
indicarle realizar una acción. Mensaje.-
Llamada a un método (o función) del objeto.
6. 6. DIAGRAMAS
DE CLASE
En esta guía de C#, explico cómo crear un
proyecto con distintas clases en Visual C#. Va a tratarse de una aplicación de
Consola o de formularios, en donde vamos a aprender a usar la utilidad de
diagrama de clases, vamos a crear clases estáticas y a explicar cómo se realiza
la herencia y a generar varios constructores.
la clase principal que se trabaja es Persona,
con las subclases Empleado y Estudiante,
Un Empleado suiempre estará relacionado con uns Empresa y un Estudiante con una
Universidad. los Diagramas de Clases son muy útiles para esquematizar la
Gerarquía y Herencia de Clases.
En el ejemplo se muestra la aplicación, de la clase
principal Persona, la estructura del proyecto será la siguiente:
Clase principal:
Persona
Sub Clases:
Empleado
Docente
Administrativo
Ordenanza
Estudiante
Empresa
Universidad
Los tipos de relaciones que manejamos en las
clases son: Herencia y Asociación.
La clase principal será Persona, con dos
subclases llamadas Empleado y Estudiante, heredando sus propiedades.
Empleado a su vez tendrá las clases derivadas
llamadas Docente, Administrativoy Ordenanza, heredando sus propiedades.
La clase Estudiante tiene una relación de
asociación con la clase Universidad, y la clase Empleado tendrá relación de
asociación con la clase Empresa.
7 7. RELACIÓN ENTRE CLASES
- · Cuando se trabaja con proyectos grandes, el hecho de repartir una clase entre archivos independientes permite que varios programadores trabajen en ella al mismo tiempo.
- · Cuando se trabaja con código fuente generado automáticamente, se puede agregar código a la clase sin tener que volver a crear el archivo de código fuente. Visual Studio usa este enfoque al crear formularios Windows Forms, código de contenedor de servicio Web, etc. Puede crear código que use estas clases sin necesidad de modificar el archivo creado por Visual Studio.
- · Para dividir una definición de clase, use el modificador de palabra clave PARTIAL , como se muestra aquí:
public
partial class Employee
{
public void DoWork()
{
}
}
public
partial class Employee
{
public void GoToLunch()
{
}
}
La palabra clave partial indica que
se pueden definir en el espacio de nombres otros elementos de la clase, la
estructura o la interfaz. Todos los elementos deben usar la palabra
clave partial. Todos los elementos deben estar disponibles en tiempo de
compilación para formar el tipo final. Todos los elementos deben tener la misma
accesibilidad, como public, private, etc.
Si algún elemento se declara abstracto, todo
el tipo se considera abstracto. Si algún elemento se declara sellado, todo el
tipo se considera sellado. Si algún elemento declara un tipo base, todo el tipo
hereda esa clase.
En el ejemplo siguiente se muestra que los tipos anidados pueden ser
parciales, incluso si el tipo en el que están anidados no es parcial.
class Container
{
partial class Nested
{
void Test() { }
}
partial class Nested
{
void
Test2() { }
}
}
8. 8. ABSTRACCIÓN
·
Suprimir
o esconder algunos detalles de un proceso o
artefacto con el propósito de resaltar más
claramente otros
aspectos, detalles o estructura
·
Ocultar
información, o encapsulado, en programación,
consiste en omitir detalles de implementación
·
Permite
gestionar la complejidad
·
Ejemplo
de niveles de abstracción: mapas
ü Un mapa del mundo muestra continentes,
grandes cordilleras
y ríos
ü Un mapa de un continente muestra todos los
países y las
ciudades principales
ü Un mapa de un país muestra las principales
ciudades y
carreteras
ü Un mapa de una ciudad muestra las calles
Cada nivel tiene información apropiada al
nivel de abstracción.
C#
enum Palos {Oros, Copas, Espadas, Bastos};
// En C# un enum no puede definirse dentro
de una clase
class CartaBaraja {
public Palos palo () { return valorPalo; }
public int
numero () { return valorNumero; }
private Palos valorPalo;
private int valorNumero;
};
9 9. ENCAPSULAMIENTO
La encapsulación implica el tratamiento de un
grupo de propiedades, métodos y otros miembros como una única unidad u objeto.
Los objetos pueden controlar el modo en que se cambian las propiedades y se
ejecutan los métodos. Por ejemplo, un objeto puede validar valores antes de
permitir cambios en propiedades. La encapsulación facilita también el cambio de
implementación posterior al permitir ocultar los detalles de implementación de
los objetos (ocultación de la información).
Ejemplo de encapsulamiento:
Public class Quebrado
{
private int numerador, denominador;
pubic Quebrado(int n, ind d)
{
numerado=n;
dominador=d;
}
pubic int
getNumerador()
{
return numerador;
}
pubic void setNumerador(int n)
{
Numerador=n;
}
};
10. HERENCIA
Es un mecanismo que permite
definir nuevas clases a partir de otras ya definidas. La sintaxis es la
siguiente:
class <nombreHija>:<nombrePadre>
{
<nombreHija>
}
|
Modificarores:
·
public: De acceso desde cualquier parte del programa
·
private: De acceso exclusivo para los miembros de la clase que lo
contiene
·
protected: De acceso solo a los miembros de la misma clase o clases
derivadas. No se accesan desde el
exterior.
·
internal: De acceso desde el mismo ensamblado, la misma
clase y métodos de sus clases derivadas
1 11. POLIMORFISMO
Es la capacidad de
almacenar objetos de un determinado tipo en variables de tipos antecesores del
primero a costa, claro está, de sólo poderse acceder a través de dicha variable
a los miembros comunes a ambos tipos. Sin embargo, las versiones de los métodos
virtuales a las que se llamaría a través de esas variables no serían las
definidas como miembros del tipo de dichas variables, sino las definidas en el
verdadero tipo de los objetos que almacenan.
1 REFERENCIAS
BIBLIOGRAFICAS
v Moros Valle, Begoña(2010) Prgramacion
Orientada a Objetos en C#. Recuperado de http://dis.um.es/~bmoros/privado/apuntes/Curso09-10/POO6-CSharp-0910.pdf
v Recuperado de https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods
v Recuperado de http://www.microsoft-visualstudio.com/2014/03/creacion-de-diagramas-de-clases-en.html