domingo, 24 de septiembre de 2017

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}
Por ejemplo, el siguiente código muestra una declaración de un  finalizador para la clase "CAR"

{
    ~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