OOP como un RPG

¡Aprender jugando!

¿Quién soy?

Elena Guzmán Blanco, entre otras cosas:

  • Android y C# developer
  • Escritora y worldbuilder
  • Directora de juegos de rol
  • Bloguera
  • Fan de TODO pero sin tiempo para nada
¿Qué es programar?

Algunos lo definen como magia, porque es una gran forma de crear.

En realidad, es dominar un lenguaje intermedio con el que comunicarnos con la máquina, para recibir y escribir datos.

Con estas instrucciones, resolver situaciones, optimizar algoritmos, facilitar operaciones.

¿Qué lenguaje elegir?

Hay muchos lenguajes, y cada vez aparecen más.

¿Cuál elegir entonces? La respuesta es más sencilla de lo que pudiera parecer.

Todo depende.

Y no olvidemos las modas.

Entonces... ¿por qué C#?
  • Un lenguaje en expansión
  • Lenguaje de scripting en Unity3D
  • Multiplataforma
  • Mucho soporte y documentación
  • Gran comunidad
  • .NET pertenece a Microsoft
  • TIOBE lo sitúa en altas posiciones
Un paradigma "nuevo"

La Programación Orientada a Objetos (POO, OOP) es un paradigma de la programación que enfoca el código en Clases por múltiples motivos.

Sus caracterísiticas son:

  • Herencia
  • Polimorfismo
  • Encapsulamiento
  • Ocultación
  • Abstracción

Características de OOP

  • Abstracción: emulación de un elemento de la realidad para su uso de la programación. Tomar la información útil para su aplicación en el desarrollo.
  • Encapsulamiento: retención o unión de todos los elementos de una Clase. La Clase, sus instancias, son atómicas, indivisibles.
  • Ocultación: como método de seguridad, no toda la Clase es accesible, puedes ocultar miembros y funcionalidades para proteger el código y la ejecución de la aplicación.

Herencia: las Clases pueden basarse en otras y adquirir las funcionalidades de la Clase de la cual hereda.

Se puede crear incluso una jerarquía de herencia, creando un “arbol genealógico” entre Clases, para saber cómo evolucionan y crecen.

class Criatura { }
class Personaje : Criatura { }
class Druida : Personaje { }
Druida miNuevoDruida = new Druida();

Polimorfismo: las Clases permiten diferentes formas, diferentes invocaciones, haciendo más laxo el tipado fuerte.

Quizás uno de los conceptos más complejos, fuertemente relacionado con la herencia de Clases y al tipado de datos.

Su importancia depende del lenguaje que estemos usando, pues no todos tienen el mismo tipado.

Personaje otroPersonaje = new Druida();

Clases, plantillas, fichas

Una Clase es una ficha, una plantilla, un modelo que tendrá información para casos concretos basados en la información definida en la Clase.

Cuenta con Propiedades (datos), Métodos (acciones), Eventos (reacciones cuando algo sucede)...

Un ejemplo:

Personaje

Nombre: Abraxas

  • Fuerza 13
  • Velocidad 10

Habilidades

  • Ataque con espada
  • Invocación animal

class Personaje {

nombre = Abraxas

fuerza = 13

velocidad = 10

atacarConEspada();

invocarAnimal(3);

}

Instancias

Una instancia es un caso concreto basado una Clase.

Si contamos con la Clase Personaje, necesitaremos crear nuestros propios personajes para poder jugar con ellos… a través del Constructor:

Mago personajePrincipal = new Mago();

… y así podré acceder a sus miembros, Propiedades y Métodos:

personajePrincipal.Nombre = "Balem";
personajePrincipal.atacar();

Miembros estáticos

No todas las Clases son iguales, y algunas cuentan con miembros estáticos.

Los miembros estáticos no necesitan de instancias para ser invocados. Son miembros de uso “general”, no concretos de cada caso concreto de objeto.


                Mago.Descripcion();
                
            

Interfaces

C# es un lenguaje de herencia única, y con implementación de interfaces múltiple. Solo puede heredar una vez, pero puede contener múltiples interfaces.

Los Interfaces son un contrato, un aumento obligado de funcionalidad para la Clase. En este caso, aumenta las capacidades de nuestro Druida:

class Druida : Personaje, IArmoniaConNaturaleza, ICambioDeForma { }

Conclusiones

La Programación Orientada a Objetos está diseñada para facilitar nuestra labor como desarrolladores, y con todo sigue evolucionando.

La clave está en experimentar, aprender, curiosear, ampliar fronteras.

Gracias a Al Sweigart por inspirar esta charla.

Búscame en la red