POO con C#

Yhoan Galeano

 

Web Developer

Introducción a C#

Historia

Caracteristicas

  • Lenguaje de programación
  • Orientado a objetos
  • Basado en C y C++
  • Seguridad de tipos
  • Case Sensitive
  • Lenguaje de alto nivel(Compilado)
  • Incluido en el .NET Framework

Arquitectura

Framework de .NET

Porqué C#?

  • Web
  • Consola
  • Backend(REST API, Soap Services)
  • Desktop
    • Windows
    • Linux
    • OSX
  • Servicios
  • Mobile Apps
    • Android
    • iOS
    • Windows Phone
  • iOT
  • Drivers
  • Video Juegos(Unity3D)

En el mercado...

  • Agencias digitales
  • Banca
  • Gobierno
  • Seguros
  • Fábricas de Software

Productos hechos con C#

Entornos de desarrollo

  • Visual Studio Code
  • Visual Studio
  • Sublime Text
  • Notepad++
  • MonoSharp
  • Bloc de Notas

Programación Orientada a objetos 

Es un paradigma de programación que permite desarrollar soluciones a través de software basándose en los objetos del mundo real.

(POO)

Es decir...

... cualquier cosa es un objeto.

Veamos algunos conceptos claves...

¿Que es un objeto?

  • Es cualquier cosa de la que puedas emitir un concepto 
  • Estos pueden ser representados en una solución informática.
  • Nombre
  • Color
  • Peso
  • Edad

Comportamiento

Estado

Identidad

Conjunto de atributos que tiene el objeto.

Todo lo que el objeto puede hacer.

Representa la agrupación de aquellos objetos que presentan características similares.

  • Caminar
  • Maullar
  • Ronronear
  • Dejar caer cosas solo por diversión

Clase Gato

En la siguiente imagen, cada uno de los animales que vemos es considerado un objeto. Sin embargo de todos ellos podemos emitir un concepto  conocido y para ellos usamos la palabra GATO

A ese concepto conocido que representa una agrupación de objetos se le conoce como clase.

Una clase ...

... es como un molde de galletas, este determina la forma y características que la galleta (objeto) va a tener...

El molde (la clase) no determina por ejemplo, que sabor tiene cada una de las galletas, ni tampoco por cuanta cantidad de ingredientes estará compuesta. 

 

Osea que de una clase podemos generar muchos objetos.

Clase

Nombre
Color
Peso
Edad
Caminar()
Maullar()
Ronronear()
DejarCaerCosas()
Acciones o métodos
Atributos o propiedades
Gato
Nombre: Pelusa
Color: Blanco
Peso: 14 lbs
Edad: 3 años
Caminar()
Maullar()
Ronronear()
DejarCaerCosas()
Acciones o métodos
Atributos o propiedades
Gato 1
Nombre: Garfield
Color: Naranjado
Peso: 30 lbs
Edad: 5 años
Caminar()
Maullar()
Ronronear()
DejarCaerCosas()
Acciones o métodos
Atributos o propiedades
Gato 2
Nombre: Silvestre
Color: Negro
Peso: 18 lbs
Edad: 6 años
Caminar()
Maullar()
Ronronear()
DejarCaerCosas()
Acciones o métodos
Atributos o propiedades
Gato 3

Objetos

clase Gato

cadena nombre

cadena color

real peso

entero edad

// Atributos

// Funciones o métodos

funcion maullar()

finfuncion

escribir("Meowww")

funcion ronronear()

finfuncion

escribir("rrrrrrrrrrrrr")

finclase

Pseudocódigo

Ya vamos entendiendo

Entonces, una clase esta compuesta por:

  • Características (Atributos o propiedades)
  • Comportamientos (Acciones o métodos)

Algo para tener en cuenta...

Las características y comportamientos de una clase son determinadas por el contexto del problema o escenario.

 

Esto en programación quiere decir, que dentro de un sistema, solo implementamos los atributos y métodos relacionados con el ámbito del problema que estamos solucionando.

Algo para tener en cuenta...

Cuando creamos un objeto de una clase le llamamos instancia.

 

Para comunicarnos con los objetos, desde la instancia nosotros le enviamos mensajes solicitándoles que realicen sus métodos por sí mismos.

 

De esta misma manera, nosotros le pedimos que nos regale información sobre alguno de sus atributos para mostrarlo o cambiar su valor.

Instancia

Gato pelusa = new Gato();

Nombre de la clase

Nombre del objeto

Creando un nuevo objeto (instancia)

Llamada al método constructor de la clase

Y para acceder a sus funciones y propiedades:

pelusa.color = "Negro";
pelusa.Maullar();

Pero ... ¿que es un método constructor?

Constructor

Un constructor es método que cumple la función de  inicializar un objeto de una clase. Este se llama automáticamente cada vez que se crea una instancia.

 

En el constructor se asignan los valores iniciales para cada uno de los atributos de la clase, los cuales el nuevo objeto poseerá.

 

El método constructor siempre posee el mismo nombre de la clase a la cual pertenece y no puede devolver ningún valor (ni siquiera se puede especificar la palabra reservada void).

Constructor

Si en una clase no se escribe un constructor, este se asume por defecto. Ademas, no contendrá parámetros y tampoco funcionalidad. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento.

class Gato
{
    public string nombre;
    public int edad;


    public Gato(){
        Console.WriteLine("Constructor de la clase Gato");

        //Aquí inicializo los atributos de la clase...
    }
}

Sobrecarga de constructores

class Gato
{
    public string nombre;
    public int edad;


    public Gato(){
        Console.WriteLine("Constructor de la clase Gato");

        //Aquí inicializo los atributos de la clase...
    }

    public Gato(string nombre, int edad){
        
        this.nombre = nombre;
        this.edad = edad;
    
    }
}

Palabra reservada this

La palabra reservada this sirve para hacer referencia a miembros de la clase en caso de que se quiera especificar, ya sea por motivos de colisión de nombres o por la claridad del código. Su sintaxis es:

  • this.campo

Donde campo es la variable de la clase a la que queremos hacer referencia.

 

Repaso

Ahora vamos a C#

Principios de POO

Abstracción

Definición

Una clase es una abstracción o una entidad esencial del problema o solución. Es decir, la abstracción es el proceso en el cual separamos las propiedades más importantes de un objeto, de las que no lo son.

 

Por medio de la abstracción definimos las características esenciales de un objeto del mundo real, los atributos y comportamientos que lo definen como tal, para después modelarlo en un objeto de software.

Encapsulamiento

Definición

También referido como ocultación de la información, el encapsulamiento es la propiedad de la orientación a objetos que nos permite asegurar que la información de un objeto le es desconocida a los demás objetos en la aplicación.

 

Dentro del encapsulamiento encontramos los siguientes ámbitos de visibilidad:

  • Pública (public)
  • Privada (private)
  • Protegida (protected)

Ejemplos

Hagamos un taller

Herencia

Definición

Permite reusar código-conocimiento-funcionalidad en una clase-padre que hereda sus atributos y métodos a sus clases-hijas, subclases o clases-tipos derivados.

 

Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad.

Ejemplos

Polimorfismo

Definición

El polimorfismo es la propiedad por la cual una entidad puede tomar diferentes formas.

 

Generalmente está entidad es una clase y la forma en la que se consigue que tome diferentes formas es por medio de nombrar a los métodos de dicha clase con un mismo nombre pero con diferentes implementaciones.

Ejemplos

Diccionario de Términos

Clase: Propiedad y comportamiento de un tipo de objeto concreto.

 

Objeto: Entidad provista de un conjunto de atributos (datos) y de comportamiento o funcionalidad (métodos). Es una instancia a una clase.

 

Instancia: Lectura de los datos y funciones de una clase y la creación de un objeto a partir de éstos.

 

Atributo: Datos y propiedades del objeto.

 

Método: Algoritmo asociado a un objeto. Define aquello que el objeto puede hacer.

Evento: Acción que provoca una interacción del usuario con la máquina.

 

Mensaje: La comunicación dirigida a un objeto ordenando que ejecute uno de sus métodos.

 

Abstracción: Razonamiento para crear las clases capaces de dar la solución al planteamiento.

 

Herencia: Una clase puede heredar los campos y métodos de otra clase.

 

Polimorfismo: Varios objetos de la misma clase pueden actuar de diferente manera.

POO en C#

By Yhoan Andres Galeano Urrea