3.- Voy a crear un objeto

3.- Voy a crear un objeto
En esta entrega, vamos a crear un objeto y que previamente debemos construir su plantilla o clase, pero no vamos a utilizar ningún lenguaje de programación conocido, sino que vamos a inventarnos uno, el lenguaje «der Waki«. (Vaya tela con er Waki y sus inventos!!)Vamos a crear el objeto vehículo del primer post, un vehículo simple que arranca, para el motor y avanza, que tiene matrícula, número de bastidor, potencia y velocidad, para ello, debemos crear la plantilla; en lenguajes de programación, se comienza siguiendo una ortografía concreta, declarando la clase, pero como nos vamos a inventar un lenguaje nuevo, pues adelante ahí va!!

(el vehículo que vamos a generar, le obviamos muchos de los aspectos técnicos que conocemos, ya que el fin de este post, es aprender a programar, no hacer un master en automovilismo!. Supongamos que es un vehículo automático, sin embrague que es más fácil, de conducir)

declaro Vehículo

(comienza declaración de clase)

Nota:  ahora declaro las características. (las notas no afectan al declarar ni instanciar el objeto, son NOTAS)

propiedad matrícula. Esto es texto.

propiedad número de bastidor. Esto es texto.

propiedad potencia. Esto un número.

propiedad velocidad. Esto un número

Nota: ahora declaro los métodos

método Arrancar Motor

(comienza método)

Requisitos. Estar parado el motor. Nota: Es simple, pero debe ser así, jeje

Acciones. Alimentar con electricidad el coche, accionar motor de arranque, enviar combustible, arrancar motor.

(finaliza método)

método Parar Motor

(comienza método)

Requisitos. Estar arrancado el motor.

Acciones. Cortar alimentación al coche, parar motor.

(finaliza método)

método Avanzar (¿Hasta que velocidad?)

(comienza método)

Requisitos. El vehículo debe estar arrancado, el vehículo no debe tener el freno de mano echado….

Acciones.  Llevar el coche a la velocidad del método. Envío más o menos combustible a los inyectores dependiendo de como esté pisado el acelerador y como es automático, el embrague se ha accionado y la caja de cambios engrana con otros métodos internos y … Nota: Y muchas más cosas que ocurren y se comprueban antes de avanzar (encapsulación), nosotros no las vemos!!

(finaliza método)

(finaliza declaración de clase)

Pues esto con mucha simpleza y con el leguaje «der waki», hemos declarado una clase llamada vehículo, si ahora quiero crear un objeto vehículo, digo en mi lenguaje…

Crear nuevo Vehículo que voy a llamar vehículo der waki

la matrícula del vehículo der waki es 0000 AAA

el número de bastidor de vehículo der waki es XXXXXXXX

la potencia de vehículo der waki es 177 CV

la velocidad de vehículo der waki es 0 km/h

Ordeno al vehículo der waki Arrancar Motor

Ordeno al vehículo der waki Avanzar (hasta los 20 Km/h)

Ordeno al vehículo der waki Avanzar (hasta los 50 Km/h)

Ordeno al vehículo der waki Avanzar (hasta los 0 Km/h) Nota: Esto es lo mismo que frenar, no?

Ordeno al vehículo der waki  Parar Motor

Pues esto, en un lenguaje muy simple, es lo que se hace con una clase para convertirla en un objeto. Una vez creada la plantilla (clase) podemos crear (instanciar) tantos vehículos como queramos y asignarles las propiedades distintas a cada uno de estos objetos. Vehículos distintos con diferentes propiedades pero basados en una misma plantilla.

Como ya veremos no es tan difícil adaptar el lenguaje «der waki» a los lenguajes de programación, prácticamente y por eso lo he hecho así, se hacen de este modo. Tranquilos, ya llegará el momento de escribir código, primero la base. Para integrar o derivar hay que aprender muchas cosas antes!

Saludos «der Waki».

2.- En programación todo es un objeto

2.- En programación todo es un objeto
¿Qué es una clase? Una clase es una colección de objetos que comparten características comunes entre ellos. Es la plantilla en la que nos basamos para crear un objeto.Un clase contiene métodos y propiedades entre otras cosas y siguiendo el ejemplo del post de ¿Que es la Programación Orientada a Objetos? podemos decir que el vehículo es una clase, sus características son propiedades y sus funcionalidades métodos. Además a los objetos en la clase les podemos añadir eventos que son acciones que se realizan cuando ocurre un suceso concreto.

Para crear el objeto generamos una clase y dentro de esta sus propiedades y métodos y esto se hace mediante texto con una “ortografía” concreta dependiendo del lenguaje utilizado. Si estamos desarrollando una aplicación de Windows con .NET utilizaríamos por ejemplo como  lenguaje C# (csharp) o Visual basic y con la ortografía concreta de cada lenguaje generaríamos esa clase; posteriormente necesitaríamos de un programa compilador para convertir esta clase en una aplicación ejecutable de window.

Una librería DLL es una clase y no es un programa ejecutable tipo window, tiene funcionalidades y características concretas.

Vamos a poner un ejemplo práctico, creamos una aplicación tipo ventana en la que vamos a incluir una caja de texto donde poder escribir y un botón y cada vez que pulsemos, aparecerá un mensaje de alerta con el texto de la caja.

Normalmente Visual Studio hace muchas cosas por nosotros, pero vamos a entender que no. Entonces, para crear la ventana de window generamos una nueva clase la cual HEREDARÁ de la clase form para que tenga todas las funcionalidades de un formulario tipo window, titulo, botones de cerrar, minimizar, maximizar, ajustable, etc. La clase form es un OBJETO al instanciarla. Dentro de ese nuevo form que hemos creado añadimos la caja de texto y el botón (en un futuro ya veremos cómo hacerlo) y tanto la caja de texto donde escribimos y el botón son OBJETOS, son clases también con sus propiedades, métodos y eventos que al instanciarlas, se convierten en objetos, estos, llamados controles, heredan funcionalidades comunes  de la clase CONTROL que también es un OBJETO y la clase control hereda de otra Component y así de ese modo mediante la herencia de clases le añadimos el legado de otros desarrolladores que generaron esas clases.

Las clases son plantillas para crear OBJETOS y al agregar un control tipo botón al formulario como contenedor estamos instanciando una clase que será un OBJETO o una clase botón y la estamos añadiendo en esta contenida.

En definitiva, en programación todo es un OBJETO.

Nota: Todos los lenguajes de programación están orientado a objetos, JAVA por ejemplo es un lenguaje tipo POO, C++  o C#. Todo lo que explique irá orientado a .NET y como lenguajes C# o VB.NET.

Saludos «der Waki»

1.- ¿Que es la Programación Orientada a Objetos (POO o OOP, Object Oriented Programming)?

1.- ¿Que es la Programación Orientada a Objetos (POO o OOP, Object Oriented Programming)?

Este es mi primer post en wakicode y como no, voy a dedicarlo a lo que creo que es más importante para aprender a programar, la Programación Orientada a Objetos.

Como para cualquier situación en la vida en la que debemos realizar un trabajo, proceso, tarea, etc. necesitamos de unos conocimientos previos para poder realizarlos; por ejemplo, si jamás hemos conducido un coche, al sentarnos solos por primera vez delante del volante es como si nos sentáramos en una cabina de un avión; si no hay conocimientos, no hay conducción o sin embargo si la hubiera porque hemos visto a alguien conducir, lo haríamos mal o aprenderíamos con defectos que costarían mucho luego corregir. Para aprender a programar, es necesario conocer obligatoriamente los conceptos de POO, ya que sin ellos, puede que hagamos pinitos en programación, pero jamás llegaremos a poder afrontar aplicaciones claras y limpias en las que poder corregir, reutilizar o compartir. Si aprendéis bien estos conceptos, aprenderéis a programar, si aplicáis correctamente los conceptos de POO, estos cumplirán su promesa

¿Qué es un objeto en programación? Pues es como en la vida real, un algo que tiene unas características concretas y que puede hacer cosas o no. Un ejemplo. Una radio es un objeto que tiene las siguientes características:

  • Onda media
  • Frecuencia modulada
  • Onda corta
  • Puede variar el volumen
  • Puede buscar frecuencias
  • Puede cambiar entre onda corta, onda media y frecuencia modulada
  • Tiene dos altavoces
  • Tiene un indicador de estéreo
  • etc…

en líneas generales hemos detallado un objeto con unas características y que además tiene funciones como cambiar a FM, variar volumen, variar frecuencia, etc.. grosso modo, si quisiera en programación crear una radio, tendría un objeto radio que he creado antes y simplemente instanciaría una nueva radio cuantas veces quisiera. Vamos a detallar los principios de la POO y luego pasaremos a un ejemplo.

La POO tiene unos conceptos básicos y fundamentales y son encapsulación, herencia y polimorfismo.

La encapsulación (arte de ocultar) es la capacidad de ocultar los procesos internos de un objeto y proporcionar los que si queremos que usen los usuarios. En el caso de la radio, el usuario no tiene porqué saber como desmodula la radio la señal de frecuencia modulada en señal de audio, es decir la señal que recibe la antena y que se convierte en música por el altavoz. El usuario ENCIENDE o APAGA, CAMBIA de frecuencia, VARIA el volumen, etc. pero no tiene porqué conocer que hace interiormente. Cada vez que instanciemos una nueva radio, el usuario solo podrá ver y usar estas funciones.

La herencia es la relación que tiene un objeto de otro objeto. Yo tengo una herencia de mi padre y de mi madre, porque he heredado y valga la redundancia genéticamente características propias de ellos. Además con el tiempo, yo he adquirido nuevas características que me hacen único como cualquier ser humano, bueno pues en programación es la parte más significativa del diseño de un sistema; sin herencia tendríamos que repetir y cambiar código continuamente cada vez que hiciéramos una corrección. En definitiva es aprovechar objetos con características concretas y heredarlas a nuestro objeto. Un ejemplo.

Creamos un objeto vehículo, el cual solo le vamos a dar la funcionalidad de arrancar, parar y avanzar y como características un motor con la posibilidad de cambiar su potencia, matrícula, número de bastidor.

Creamos otro objeto al que llamaremos vehículo con marcha atrás, este objeto va a heredar de vehículo pero le damos un nuevo desempeño, marchar hacia atrás.Creamos ahora un objeto camión, que hereda las funcionalidades de vehículo con marcha atrás; a este objeto camión, le añadimos una caja y a esta caja le damos la posibilidad de cambiar su volumen para en un futuro poder crear camiones con diferentes capacidades. Creamos otro objeto turismo que hereda de igual modo de vehículo con marcha atrás y a este se me ocurre ponerle una característica como número de puertas y la posibilidad de hacerlo descapotable y por último creamos un objeto motocicleta el cual va a heredar de vehículo y le damos una característica concreta de tipo (carretera, trial, trail, scooter, enduro,….).

Si quisiera crear un camión con caja de 10 metros cúbicos, simplemente instanciaría un objeto camión, le asignaríamos el volumen y como hereda de vehículo marcha atrás y este de vehículo, podrá arrancar, parar, avanzar, ir hacia atrás y además con las características propias de un vehículo, matrícula, potencia y número de bastidor.

Supongamos que en un futuro le añadimos nuevas características a los vehículos como por ejemplo aparcar solo, pues agregamos al objeto vehículo con marcha atrás la posibilidad de aparcar, mientras que las motocicletas no podrían. Las funciones internas que deba realizar el objeto en sus entrañas para poder aparcar solo es a lo que nos referíamos antes con el concepto de encapsulación, el usuario no tiene porqué conocer que hace para aparcar solo.

El polimorfismo es la funcionalidad de invocar nuevo código con código antiguo. Expliquemos esto. El vehículo puede avanzar, pero en el caso del camión le podemos añadir la posibilidad de avanzar con reductora, es decir le damos esa posibilidad pero bajando la velocidad en beneficio de potencia para llevar más peso. Esto implica que dentro del objeto camión creamos una función avanzar pero propia del camión. Esto nos proporciona dos beneficios, uno es poder agrupar objetos que tienen una base común y tratarlos consistentemente y otra es que el código antiguo puede utilizar un código nuevo.

Esto es solo un pequeño resumen de la POO que espero hayáis entendido, sin estos conceptos, los programas que desarrolléis en un futuro podrían convertirse en una pesadilla con su consecuente pérdida de tiempo.

Saludos “der Waki”