El enfoque de objetos
Aspectos principales del objeto, un concepto obvio
1. Antes de continuar
Se encuentra en el penúltimo capítulo de este libro. Si su objetivo era aprender a programar en lenguajes procedimentales o funcionales, es decir, basados en el uso de subprogramas como los presentados aquí, podría detenerse aquí. De hecho, ahora tiene todo lo que necesita para programar en C o Pascal.
Sin embargo, sería una lástima no continuar, aunque no tenga que empezar a programar con objetos de inmediato. Desde principios de los años 90, la programación de objetos no sólo se ha convertido en un clásico, sino que ha pasado a formar parte de la cultura informática. Lenguajes como C++, una evolución del lenguaje C e incluso otros como Delphi derivado de Pascal, Visual Basic derivado de Basic, así como la mayoría de los lenguajes de macros de MS Office u OpenOffice.org o los lenguajes de ciertos gestores de bases de datos, son lenguajes de objetos.
Si no comprende su finalidad, corre el riesgo de perderse muchos productos, muchas funcionalidades y, a veces, incluso una mayor simplicidad en determinados procesos.
2. Recordatorios sobre programación procedimental
Los procedimientos o funciones reciben datos como argumentos (argumentos). Devuelven valores bien por el mismo camino (punteros o referencias), bien devolviendo datos directamente como resultado de la función.
En un lenguaje procedimental (o funcional), los datos están separados de los programas que los utilizan.
a. Los datos
Cada variable tiene un tipo que indica qué clase de valor puede contener. Se dice que estos tipos son primitivos cuando los propone directamente el propio lenguaje. Pueden diferir de un lenguaje a otro, pero C ofrece una serie de enteros, reales y caracteres. Otros son las cadenas.
El tipo de variable también puede ser definido por el programador. Se trata de los tipos estructurados que usted mismo describe.
Las tablas se utilizan para agrupar varias apariciones de valores en la misma variable. Pueden contener n valores, generalmente del mismo tipo (en lenguajes tipados como C) o no (en lenguajes no tipados como PHP).
Las variables especiales llamadas punteros no contienen directamente un valor, sino la dirección de una variable que contiene ese valor, es decir, la dirección de la ubicación de ese valor en la memoria del ordenador. Aunque...
Manipulación de objetos
1. Los constructores
a. Declaración
Cuando instancia una clase, es decir, cuando crea un objeto de un tipo de clase determinado, a menudo necesita llamar a varios métodos para rellenar sus atributos con los valores correctos. Tomando de nuevo el ejemplo de la clase Pantalla, no cabe duda de que al crear un objeto de este tipo querrá establecer los atributos tipo, marca, modelo, etc. en los valores correctos. La solución actual es llamar explícitamente a los métodos previstos para ello: modif_tipo(), modif_marca(), modif_modelo(), etc.
Existe una forma más eficiente e implícita de establecer los valores correctos de los atributos (y realizar cualquier otra operación necesaria) en la instanciación. Se trata del constructor.
El constructor es un método especial que se llama automáticamente en cuanto crea un objeto sin que tenga que especificarlo, ya sea por declaración o por asignación dinámica (mediante un puntero). En este método, es libre de hacer lo que quiera, pero en el 90% de los casos su función será dar a los atributos sus valores iniciales correctos o valores por defecto.
Un constructor debe tener las dos propiedades siguientes:
-
Tiene el mismo nombre que la clase.
-
No devuelve ningún valor.
Usando el polimorfismo paramétrico (también conocido como sobrecarga de métodos), puede crear tantos constructores como quiera, uno para cada caso dependiendo de los argumentos pasados. En los algoritmos, se añade la palabra clave constructor delante del nombre del método para sustituir a Procedimiento o Funcion. Esto no es necesariamente obligatorio, ya que ningún otro método debe tener el mismo nombre que la clase.
b. Llamada implícita
Se han añadido dos constructores a la clase Pantalla: el primero no recibe argumentos y se utilizará cuando el objeto no reciba ningún valor al crearse. El segundo recibe tres argumentos (tipo, marca, modelo) para inicializarlos cuando se crea el objeto.
Un constructor que no recibe argumentos se denomina constructor por defecto. Se llama cuando no se pasa ningún valor al objeto cuando se crea.
Clase Pantalla
atributos privados
tipo :cadena
marca :cadena
modelo :cadena ...
Objetos en PHP
1. Lenguajes objeto
Las dos partes anteriores de este capítulo le han introducido en la programación orientada a objetos. Existen varios lenguajes orientados a objetos. Se conocen como programación orientada a objetos (POO). Los inicios de la programación orientada a objetos se remontan muy atrás (en lo que a informática se refiere): 1967 con el lenguaje Simula, seguido de Smalltalk. La edad de oro comenzó a principios de los 80, primero con Objective C (todavía muy utilizado, sobre todo en el desarrollo de Mac OS y sus herramientas), luego "C con clases" en 1983, que se convirtió en C++, seguido de Eiffel, Object Lisp y así sucesivamente.
En los años 90 se produjo una explosión en el uso de objetos de todo tipo, para bien o para mal, y no sólo en los lenguajes. Aparecieron las bases de datos de objetos. Lenguajes antiguos como Pascal, Basic e incluso COBOL evolucionaron hacia el objeto: Delphi, Visual Basic, Cobol Objet, etc. Incluso los macrolenguajes específicos de las suites ofimáticas (MS Office, OpenOffice.org) o de las bases de datos (Access, Paradox) pretenden ser lenguajes orientados a objetos. Si la definición de objeto corresponde más o menos a lo que se le ha presentado desde el principio de este capítulo, los puristas se reirán en algunos casos.
La llegada de Java como verdadero lenguaje objeto de alto nivel, ha cambiado muchas cosas: tomando las buenas ideas de C++, las adapta en un todo más sencillo y práctico, adaptado a las necesidades modernas de los desarrolladores y, sobre todo, de las aplicaciones.
La fuerza de SUN reside en su capacidad para ofrecer un lenguaje adaptado a un amplio abanico de necesidades: applets Java, aprendizaje de objetos, aplicaciones remotas, servidores de aplicaciones, etc.
Un gran competidor de la plataforma Java (Java, sus herramientas, sus API, etc.) es .NET con el lenguaje C# (pronunciado C sharp) y está obviamente orientado a objetos. Los ejemplos de este libro se podrían haber desarrollado perfectamente en C#, teniendo en cuenta que el lenguaje ya está disponible fuera de Windows.
Otro competidor de Java y .NET es PHP. El objeto apareció en la versión 4 de PHP, tras numerosas peticiones al respecto. Sin embargo, era muy simple y bastante limitado. PHP se convirtió en un verdadero lenguaje...
Ejercicios
Ejercicio 1
Cree las cinco clases del siguiente diagrama, teniendo en cuenta su herencia. Todos los métodos son públicos y los atributos privados.

Ejercicio 2 (continuación del 1)
Cree accesores para todos los atributos. Cree un constructor en la clase Vehiculo tomando como argumentos el color y el peso. Modifica el método circular() para que muestre "El vehículo está rodando". Modifica el método agregar_persona(peso_persona) para que cambie el peso del vehículo según el peso de la persona pasada como argumento.
Cree una página visualizar.php creando un vehículo negro de 1500 kg de peso. Condúcelo.
Añade una persona de 70 kg y visualiza el nuevo peso del vehículo.
Ejercicio 3 (continuación del 2)
Implemente el método repintar(color) para cambiar el color definido en la clase Vehiculo. Implemente el método repostar(numero_litros) para cambiar el peso definido en la clase Vehiculo. Para este ejercicio, un litro corresponde a un kilogramo.
Implemente los métodos agregar_neumatico_nieve(numero) y eliminar_neumatico_nieve(number) modificando el atributo numero _neumatico_nieve.
Implemente el método agregar_remolque (longitud_remolque), modificando el atributo longitud.
En la página visualizar.php, cree un coche verde que pese 1400 kg. Añada dos personas de 65 kg cada una. Muestre su color y su nuevo peso.
Vuelva a pintar...