Introducción a la POO por EDteam

Video

#OOP #Csharp

↩️ Go Back

Table of Contents:


1 - Paradigmas: Programación Estructurada vs Orientada a Objetos

El tema de hoy es la Programación Orientada a Objetos
 
¿que tienen que ver estos dos conceptos?

Los objetos son cosas como:

Lo que pasa es que la programación es muy amplia y hay varias formas de programar. Existe algo llamado los paradigmas de programación. Estos "paradigmas" son estilos o formas de programar.

|570
https://ed.team/cursos/paradigmas


¿Cómo funciona la Programación Estructurada?

El paradigma con el que a nosotros nos enseñan a programar es el paradigma secuencial o estructurado, es decir las instrucciones van de arriba a abajo, una después de otra.

|250

Es la manera más sencilla de aprender a programar, no tenemos que abstraer cosas complejas sino simplemente:

Así aprendimos todos a programar, pero cuando empiezas a ir a proyectos un poco más grandes te das cuenta que esto no te ayuda mucho.


1.1 - EJEMPLO 1: Comparando Paradigmas de Programación - Crear una Tienda en Línea

Por ejemplo, un cliente pide una tienda en línea donde él va a vender zapatos.

|500

Entonces tienes que pensar de una manera muy diferente...

¿cómo vas a hacer de arriba hacia abajo ese programa? ¿es siquiera eso posible?
🤔🤔🤔🤔🤔

Una tienda en línea para vender zapatos tiene:

son muchas cosas que no pueden escribirse de arriba hacia abajo...

- Solución con Programación Orientada a Objetos

Necesitamos otra forma de programar para lograr hacer esta tienda en linea. Necesitamos usar el paradigma de la programación orientada a objectos.

El paradigma más usado en el mundo (no el mejor porque eso es relativo, pero si el más usado en el mundo) es la programación orientada a objectos porque cada uno de estos elementos que necesita el sistema como:

cada uno de esos elementos es un objeto en este paradigma y esos objetos tienen:

Por ejemplo:

En resumen: cada uno de esos elementos en los que nosotros vamos dividiendo el sistema es un objeto y los objetos tienen datos y tienen funcionalidad.

1.2 - Ventajas de la Programación Orientada a Objetos

Entonces con la programación orientada a objetos pasamos de tener un codigo de arriba hacia abajo (en el que las funcionalidades están todas metidas y que es muy difícil de separar y de escalar).

A un sistema en el que tenemos objetos separados y que se comunican entre ellos.

Por ejemplo, en la tienda en linea existe el "usuario" que se comunica con el "producto" para comprarlo. El "producto" que se comunica con el "carrito", el "carrito" con la "pasarela de pago" y a la vez con el "usuario" etcétera...

Los objetos se comunican entre ellos, entonces de esta manera es más fácil manejar y mantener un sistema y hacerlo crecer. Si luego necesitamos otra funcionalidad podemos agregar otro objeto o incluso agregarle atributos o funcionalidad a los objetos que ya existen.

2 - ¿Qué son los Objetos?

Repasemos, ¿qué son los objetos?

|400

Para poder dividir nuestro sistema, necesitamos ser capaces de identificar los objetos que lo componen, para esto es necesario pensar y hacer una "abstraccion" del sistema para comprenderlo y enfocarnos en la programación.

La abstracción en la programación orientada a objetos es el proceso de identificar los aspectos esenciales de una entidad, separándolos de los más complejos o menos esenciales. En otras palabras, es una simplificación que permite al programador centrarse en lo que un objeto "hace", en lugar de "cómo lo hace".

2.1 - Ejemplo de "Abstracción" - ¿cómo definir al usuario de una tienda en línea?

Para entender mejor que es la Abstraccion, imagina que queremos realizar el sistema de usuarios de una tienda en linea.

|70

Entonces, antes de empezar a programar hacemos un proceso llamado abstracción. Y nos ponemos a pensar que atributos y qué métodos debería tener este usuario para nuestra aplicación. 🤔🤔🤔
 
Entonces luego de esa reflexión nosotros llegamos a la conclusión que nuestro usuario debe tener los siguientes atributos:

Y tambien debe de tener, los siguientes métodos:

|450

2.1.1 - Clase: la "plantilla" de los Objetos

Este objeto de "usuario" se crea en código obviamente...

Pero te imaginas que para cada vez que un usuario quiera registrarse, que pueden ser miles de personas, llamemos al programador y lo pongamos escribir código para cada usuario...

|550

no sería eficiente... tendríamos una cola de cientos de usuarios esperando que el programador termine con el actual para pasar al siguiente.

¿Como resolvemos ese problema de crear miles de usuarios?
Sencillo usamos algo llamado Clase.

La clase es una plantilla, es un molde que tiene la estructura básica del objeto, y define sus atributos y sus métodos.

Entonces en el proceso de abstracción que vimos hace un momento, no creamos realmente el objeto usuario creamos la plantilla la clase usuario.

|450

Entonces cada vez que una persona llega a la tienda en linea, se registra y crea su cuenta, realmente está usando la clase que ya hemos creado y que ya está en nuestro código para crear nuevos objetos usuario.

A ese proceso de crear objetos a partir de una plantilla llamada clase se llama instanciar.

|400

Veamos algunos ejemplos de lo que podemos considerar una plantilla o clase:

2.1.2 - Instanciar/Crear Objetos a partir de una Clase

En resumen: instanciar es crear un objeto a partir de una clase, por eso es que cada uno de esos objetos también se le llama "instancia".

Y el beneficio es que solo escribimos el codigo una vez, y la creación de objetos ya sabe que atributos y metodos debe utilizar por cada nueva instancia.


3 - EJEMPLO 2: ¿Cómo usar Objetos en una Aplicación Real? - Sistema de Suscripción de Usuarios

En este ejemplo tenemos a un señor llamado Alexis,

y Alexis ha descubierto una plataforma de cursos en línea de programación que se llama EDteam.

A Alexis le parece interesante y se registra.

Entonces en el proceso de registro, Alexis invoca a la clase usuario

y la instancia para crear su usuario.

Alexis acaba de crear su usuario con su proceso de registro. Ese nuevo usuario es el usuario 528 que tiene como nombre "Alexis" y como apellido "Losada".

Este usuario empieza a consumir los cursos gratuitos de EDteam y le gusta. Entonces decide pasar a premium. El usuario escoge un plan mensual e introduce sus datos de pago (tarjeta o Paypal).

En ese momento lo que está haciendo el usuario es llamar a la clase orden de compra y esa clase orden de compra instancia a un objeto, una orden de compra asociada a este usuario.

Esta orden de compra se debe procesar, si el proceso es correcto y se valida el pago, está orden de compra llama a otra clase. Esta clase es la clase premium

y esta clase premium se instancia y crea un objeto premium con referencia al usuario que realizó la compra

y se le asigna el estado premium al usuario. Finalmente, ya puede ver todos los cursos de EDteam.

Entonces recuerda que las clases ya están allí en el sistema, son todos esos cubos grises y en el proceso se van a instanciar para crear objetos reales. Así un funciona la programación orientada a objetos.


4 - Los 4 Pilares de la Programación Orientada a Objetos

Como paradigma la programación orientada a objetos se basa en cuatro pilares que son:

Estos cuatro conceptos son la base de la programación orientada a objetos y pueden ser un poco confusos de entender al comienzo, así que atento a lo siguiente...

4.1 - Abstracción - identificar atributos y métodos 🤔💡

De la abstracción ya hablamos hace un momento, ¿te acuerdas?

Cuando queríamos crear un usuario, el proceso de abstracción era pensar qué atributos y qué métodos va a tener la clase.

|450

Obviamente cuando creamos un sistema nosotros tenemos que hacer una abstracción para todas las clases, nosotros tenemos que hacer ese proceso mental de abstracción, de pensar qué atributos y qué métodos va a tener cada clase.

Recuerda que nos importa lo que un objeto "hace", en lugar de "cómo lo hace".


4.2 - Encapsulamiento - protege los datos de los objetos 🔒💊

Ahora revisaremos el encapsulamiento.

Como hemos visto los objetos se comunican entre ellos, esto podría traer problemas de seguridad si un objeto pudiera modificar los datos de cualquier otro.

Entonces se necesita proteger la información de manipulaciones no autorizadas de tal manera que cuando se comunican los objetos hay caminos que se pueden seguir y caminos que no.

Tenemos:

de esa manera tenemos organizado el sistema, porque imagínate que cualquier objeto puede acceder a cualquier información o realizar cualquier cambio no debido. Se podría colapsar el sistema.


4.3 - Polimorfismo - usar "interfaces" para invocar métodos de diferentes objetos que tienen funcionalidades similares, pero procedimientos distintos 📣 👯‍♀️

Ahora revisaremos el polimorfismo y para explicártelo recordemos este gráfico del señor Alexis convirtiéndose en premium...

Cuando él se convierte a premium se notifica vía tres canales:

|300

Si se dan cuenta, tiene la misma funcionalidad la notificación aunque internamente cada uno de esos métodos funciona diferente.

Es decir la notificación slack tiene sus propios métodos y propia lógica (una API, etc), igual para la web e igual para el correo, usan una API diferente pero en esencia es la misma función, es la misma acción y eso nos simplifica mucho el trabajo porque podemos dar órdenes coherentes a varios objetos sin preocuparnos de como internamente ellos las ejecuten.

En otras palabras, nos dieron una orden y cada uno la cumple a su propia manera en particular.
|300

Eso es el polimorfismo, poder darle la misma orden a diferentes objetos y que cada uno de ellos responda de su propia manera.

El Polimorfismo nos permite interactuar con diferentes objetos a través de una interfaz común, permitiendo que diferentes objetos respondan de manera diferente al mismo mensaje o método invocado. Esto significa que podemos usar objetos de diferentes clases de manera intercambiable, siempre y cuando compartan la misma interfaz o clase base.


4.4 - Herencia - crear "Clases hijas" a partir de "Clases padres" 👨‍👦

El último concepto es la herencia este quizás es el más fácil de entender porque tiene mucha relación con el mundo real, por ejemplo mis hijos han heredado muchas cosas mías tanto atributos como funcionalidades.

Por ejemplo,

|300

Sin embargo ninguno de mis hijos es una copia exacta de mí, ellos tienen sus propios atributos su propia personalidad y su propia funcionalidad, etc.

En la programación orientada a objetos tambien tenemos una clase padre y las clases hijas heredan funcionalidades y atributos de esta clase padre pero no son idénticos, solamente aprovechan eso que ya existe y luego se le añaden nuevas cosas.

Por ejemplo,
Ya tenemos una clase para crear usuarios, ¿se acuerdan?

Podemos crear un usuario genérico, pero que pasa si luego decimos: necesitamos un usuario diferente que sea "staff" solamente. Estas cuentas serán para los trabajadores de EDteam, y estas cuentas deben tener diferentes funcionalidades y diferentes atributos al usuario común.

Entonces ¿qué hacemos?
Heredamos y creamos una nueva clase que heredé de la clase padre y esa clase va a ser staff y ahí podemos poner a los miembros del equipo.

Luego decimos que necesitamos otro tipo de usuario que sea profesor, porque el profesor tiene otro tipo de funcionalidad y otro tipo de atributos. Entonces también heredamos de la clase usuario y creamos la clase profesor. Y a partir de esa clase de profesor creamos todos los profesores de EDteam.

Y por último decimos que queremos meter invitados, por ejemplo gente que sin pagar una suscripción pueda tener acceso para los sorteos o para las premiaciones o las campañas que hacemos entonces creamos un rol invitado

y de esa manera podemos crear clases hijas con la herencia.


Z) Glosario

File Definition

↩️ Go Back