Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


2. Objetos y algoritmos

"Programmers have very well-honed senses of justice. Code either works, or it doesn’t. There’s no sense in arguing whether a bug exists, since you can test the code and find out. The world of programming is very just and very strictly ordered and a heck of a lot of people go into programming in the first place because they prefer to spend their time in a just, orderly place, a strict meritocracy where you can win any debate simply by being right". Joel Spolsky en "A Field Guide to Developers"    www.joelonsoftware.com.

§1  Sinopsis

Sin pretender ser demasiado rigurosos y en un sentido amplio del término, podemos decir que un programa tiene dos tipos de componentes:  datos e instrucciones [1].  Los primeros representan el objeto pasivo de las transformaciones y manipulaciones que tienen lugar en la máquina.  Los segundos representan las fórmulas o recetas que definen como debe efectuarse la manipulación.  Para aclarar estos conceptos, quizás mejor que mis palabras sean las de Alexander Stepanov, creador de la Librería Estándar de Plantillas C++:  "Things that have state and change their state are objects (datos).  And then there are things that are not objects.  A binary search is not an object. It is an algorithm" [3].

Aunque ambos conceptos son suficientemente simples e intuitivos como para no necesitar definición, incluiremos algunas consideraciones adicionales al respecto.  Debemos señalar también que este, como casi todos los criterios de clasificación, incluye una dosis considerable de arbitrariedad.  Aunque en la programación tradicional (procedural 1.7) suele existir una clara diferenciación entre los elementos pasivos del programa (datos), y los activos (algoritmos), que se agrupan en funciones, procedimientos -o bajo cualquier otro nombre-, existen circunstancias en las que los algoritmos pueden constituir la materia prima (datos) de otros algoritmos.  Es el caso por ejemplo, de lenguajes que permiten escribir programas que sirven para manipular otros programas (intérpretes y compiladores).

§2  Datos

Algo que contiene información que no sea información sobre clasificación o computación (también denominados objetos);  normalmente en forma de patrones de bits alojados en memora.  Una característica fundamental de los datos es que se puede afirmar de ellos que tienen un "valor" [2].  Los datos pueden tener muchas propiedades o atributos, pero una de las más importantes es su capacidad de cambiar el "valor".  Denominándose constantes ( 3.2.3) y variables, según que su "valor" pueda ser modificado o no a lo largo del programa.

Cuando en esta publicación queramos referirnos a estos componentes "datos" (constantes y variables) utilizaremos el término objeto-dato para distinguirlos de los "objetos" a secas (instancias de las clases 4.11.5).

§3  Instrucciones

"An algorithm is a systematic method for solving problems—a recipe, if you will. The word itself is derived from the name of the Arab who invented algebra and was one of the greatest mathematicians of all time". Brian Overland en "Choosing the Right Algorithm in C++".


También llamadas algoritmos.  Información que se refiere a manipulaciones de los datos y/o los dispositivos físicos del sistema (ordenador) que soporta el programa.  También adoptan la forma de patrones de bits alojados en memoria.

Nota:  Precisamente, esta característica de que las instrucciones estén alojadas en la memoria de la propia máquina es lo que caracteriza a los ordenadores modernos como máquinas Von Neumann.  Esto que hoy se nos antoja natural (como la caída de manzanas antes de Newton), supuso un salto conceptual importante en la ciencia informática, ya que en los primitivos ordenadores (mejor diríamos "máquinas"), los datos y las instrucciones eran tratados de forma diferente.  A veces el "programa" estaba tan íntimamente relacionado con la máquina que cambiar de "programa" suponía recablear el dispositivo si era eléctrico, o cambiar piezas si era mecánico.

Al tratar de la Estructura de la información ( 1.8), nos hemos referido a datos y algoritmos.  En el epígrafe dedicado a la Librería Estándar de Plantillas STL ( 5.1), volveremos a encontrarnos con ellos, y veremos una forma muy general de tratarlos bajo la denominación de contenedores (estructuras algebraicas que contienen datos) y algoritmos, unos operadores genéricos que actúan sobre ellas.

§3.1  Como se ha señalado (Introducción a la POO 1.1), precisamente uno de los paradigmas de la Programación Orientada a Objetos es el encapsulamiento de datos e instrucciones en entidades a las que, de forma genérica, denominamos objetos.  En este sentido, un objeto es una región específica de memoria que puede contener un conjunto de datos e instrucciones sobre su manipulación.

§3.2  En C clásico, las variables deben ser declaradas al principio de las funciones y antes que cualquier sentencia ejecutable, por el contrario, en C++ pueden ser declaradas en cualquier punto.  A este tipo de declaraciones se las denomina de referencia, e introducen uno o más identificadores en un programa, asociándolos con un tipo de variable. Ejemplos:

int x, y;
char c;

short corto;

long  distancia;

int * ptr;


  Tema relacionado:  Declaraciones y definiciones ( 4.1.2)

  Inicio.


[1]  El en un sentido estricto, el "programa" solo contiene instrucciones; aunque desde luego pueden existir múltiples puntos de vista.  Por ejemplo, para Stroustrup y Ellis un programa es méramente uno o más ficheros enlazados juntos, y un fichero consiste en una secuencia de declaraciones" ( 1.3.1)

[2]  Formalmente denominado Rvalue ( 2.1)

[3]  Al Stevens:  "Entrevista a Alexander Stepanov"  Dr. Dobbs's Journal.  Marzo 1995.