Concepto de programa.
Lenguajes.
Lenguajes de alto nivel.
Programación orientada a objetos.
Lenguajes páginas web.
Práctica de programación.
Para usar un ordenador, primero hay que indicarle qué trabajo se desea realizar y cómo debe hacerlo. Esta es la función del software, de los programas.
Desde un punto de vista de un sistema de proceso de datos, vamos a considerar a un programa como el conjunto de instrucciones que se le dan al ordenador para resolver un problema de proceso de datos.
Desde el punto de vista funcional un programa se estructura en las siguientes partes:

Para que las instrucciones de un programa puedan ser ejecutadas por un ordenador han de estar escritas en un lenguaje que el ordenador pueda entender.
El conjunto de reglas, símbolos y técnicas necesarios para la codificación de un programa recibe el nombre de lenguaje de programación.
Todo lenguaje viene definido por una gramática que no es más que el conjunto de reglas que se aplican a un alfabeto constituido por un conjunto de símbolos utilizados.
Una clasificación muy extendida de los lenguajes de programación es la siguiente:
- Bajo nivel, (lenguaje máquina), las ordenes escritas las procesa y realiza directamente la máquina. Estas instrucciones son cadenas binarias que especifican las instrucciones a realizar y la memoria donde deben realizarse. Las instrucciones dependen directamente de la máquina donde se programan.
- Nivel intermedio, (lenguaje Ensamblador), sus instrucciones son nemonicos que indican la acción a realizar y su dirección de memoria donde se ejecutan. La programación dependen de la máquina donde se programa. La máquina no entiende directamente las ordenes y es necesario traducir las ordenes a través de un programa ensamblador.
- Alto nivel, (Basic, Pascal, Cobol, C, etc.), basan la programación en sentencias y funciones que realizan una operación ya implementada en la creación del lenguaje. Son independientes de la máquina donde se programa. La máquina no puede entender directamente las sentencias y se necesita un programa traductor y linkador, o un intérprete, para que la máquina pueda ejecutar las operaciones.
La programación de aplicaciones está muy influenciada por el sistema operativo, tanto en lo que se refiere al desarrollo en sí mismo como al funcionamiento del programa final.
Es la colección de caracteres que puede emplearse en los programas. Casi todos emplean letras y dígitos, aunque presentan muchas diferencias en los caracteres especiales.
Tienen un significado especial en los programas, y no pueden emplearse para ningún otro uso.
Son el conjunto de normás que definen la estructura del programa.
Los bloques o módulos en que se divide un programa se denominan subrutinas, procedimientos o funciones que se activan mediante llamadas desde otras partes del programa. Algunos permiten que una función se llame a si misma (recursividad).
Los datos pueden ser de tipo numérico o cadenas de caracteres; los numéricos pueden ser enteros o reales. También pueden existir datos booleanos o variables lógicas.
Algunos lenguajes prestan una considerable atención al aspecto o formato de los datos.
Las matrices son tablas de elementos del mismo tipo y los registros pueden contener datos de diferentes tipos.
Por lo general los datos pueden ser
- variables que tienen un nombre o identificador y que su valor puede cambiar durante la ejecución del programa, y,
- constantes que mantienen siempre el mismo valor.
El proceso por el que una variable adquiere un determinado valor se denomina asignación.
Las variables pueden requerir que se declaren, y tener alcance local o global.
Los operadores se utilizan para representar operaciones. Operando es aquello sobre lo que actúa el operador.
Una expresión es una combinación de operadores y operandos.
Las operaciones aritméticas están contempladas en casi todos los lenguajes de alto nivel, y las operaciones lógicas AND, OR y NOT, independientes o combinadas en una expresión.
Todos los lenguajes tienen un orden de prioridad o precedencia que especifica el orden en que se ejecutan las operaciones dentro de una expresión.
El tratamiento de operaciones de entrada/salida es muy diverso.
Una sentencia es una orden dada al ordenador.
Expresiones y sentencias se pueden agrupar en funciones, como conjunto de instrucciones que permiten procesar las variables para obtener un resultado, o ejecutar operaciones.
Bajo el punto de vista de su organización dentro de un programa, las sentencias se pueden agrupar en tres familias distintas:
- secuencias, bloques que se ejecutan de forma consecutiva o lineal.
- selecciones, posibilidad de optar por la ejecución de unos bloques frente a otros según se cumpla una cierta condición.
- repeticiones, de bloques secuenciales concretos.
Los lenguajes de alto nivel, tambien llamados evolucionados, son los que más se utilizan en la actualidad. El principal problema que presentan es la gran cantidad de ellos que existen, además de que algunos de ellos han desarrollado diferentes versiones (dialectos).
LENGUAJEAÑOORIGEN DEL NOMBREAPLICACIÓNFORTRAN54FORmula TRANslatorCientíficaCOBOL59COmmon Busines Oriented LanguajeComercialALGOL60ALGOrithmic LanguajeCientíficaLISP60LISP ProcesorInteligencia artificialPL/164Programing Languaje v.1Comercial y científicaBASIC65Beginner´s All purpose Simbolic Instruction CodePropósito general y EnseñanzaAPL67A Programming LanguajeCientíficoPASCAL71BLAISE PASCALCientífico y universitarioPROLOG71PROgrammin in LOGicInteligencia artificialPILOT73Enseñanza asistida por ordenadorC74CompilerTécnico científicoADA80Lady Augusta ADA ByronPropósito general
Además de poderlos clasificar como de propósito general o de propósito especial, pueden clasificarse como:
- lenguajes de procedimiento que establecen cómo debe realizarse una tarea partiéndola en áreas de procedimiento que especifican cómo realizar cada uno de los pasos de la misma, y,
- lenguajes declarativos que describen estructuras de datos y las relaciones entre ellos que son significativas para ejecutar una determinada tarea, al tiempo que indican cuál es el objetivo de dicha tarea.
Existen lenguajes híbridos (como el C++) permiten mezclar la programación procedimental con la orientada a objetos.
El lenguaje de alto nivel está orientado hacia la resolución de una determinada clase de problemas. Es un método conveniente y sencillo de describir las estructuras de información y las secuencias de acciones necesarias para ejecutar una tarea concreta.
Un lenguaje de alto nivel es independiente de la arquitectura del ordenador que lo soporta. (Aunque en la práctica no siempre se alcanza esta independencia).
Un lenguaje de alto nivel, además:
- Ha de proporcionar un medio conveniente para expresar la solución a un determinado problema (conceptos matemáticos y lenguaje natural).
- Simplicidad (reducido conjunto de operaciones básicas, reglas para combinar estas operaciones, y ausencia de excepciones).
- Eficiencia. Traducirse a lenguaje máquina de una forma rápida y que el código resultante sea eficiente.
- La legibilidad. Sin necesidad de comentarios adicionales.
Algunos lenguajes (COBOL o Foltran) necesitan compilar su código, es decir se realiza su traducción hasta el lenguaje que entiende el ordenador antes de la ejecución del programa.
Los lenguajes interpretados (APL), en los que la traducción se realiza a la vez que la ejecución.
Los lenguajes de programación visual, son esencialmente entornos gráficos de desarrollo en los que, sin necesidad de poseer un profundo conocimiento de sintaxis complejas, se pueden realizar aplicaciones completas. Delphi, ObjectVision y Visual Basic son buenos ejemplos de ello.
La programación orientada a objetos facilita el diseño, desarrollo y mantenimiento del software:
- Portabilidad y reutilización de código
- Aplicaciones más modificables y fácilmente extensibles
- Codificación intuitiva
La programación orientada a objetos (OOP), se apoya más en los sustantivos (objetos) que en su funcionalidad (verbos).
Existe un paralelismo muy interesante y natural entre las categorías mentales del ser humano y los conceptos de la programación orientada a objetos. En efecto, los objetos corresponden a los nombres sustantivos, los valores de sus propiedades a los adjetivos, y su comportamiento (los métodos asociados a la clase a la que pertenece el objeto) a los verbos.
Un lenguaje orientado a objetos tiene tres características básicas (aunque no todos los lenguaje las soportan):
- Debe estar basado en objetos, lo esencial.
- Basado en clases.
- Capaz de tener herencia.
Además de los tres elementos esenciales de la programación orientada a objetos (objetos, clases y herencia) y del paso de mensajes (alternativa de la llamada de subrutina), existen otras propiedades que también se consideran fundamentales:
- Encapsulamiento y ocultación de datos y programas. Todos los datos (y programas) internos de un objeto deben estar ocultos dentro de éste, accesibles tan sólo a los métodos o programas asociados al mismo objeto que se declaren como públicos.
- Polimorfismo. Consiste en el hecho de que programas diferentes, asociados a objetos distintos, puedan compartir el mismo nombre, aunque el significado del programa varíe ligeramente de un objeto a otro. Es decir, dos clases diferentes pueden tener programas asociados con nombres idénticos. (Una forma de polimorfismo es también la sobrecarga de operadores).
- Ligamiento dinámico, propiedad que suelen tener muchos sistemas, pero que no se considera esencial en un sistema orientado a objetos.
- Respuesta a eventos. Las funciones son llamadas mediante eventos.
Conjunto complejo de datos y programas que poseen estructura y forman parte de una organización.
- No es un dato simple, contiene componentes bien estructurados
- No es un ente aislado, forma parte de una organización jerárquica o de otro tipo.
Para un objeto puede hablarse de:
- Su jerarquía, (relaciones) dentro de la organización a la que pertenece.
- Su estado, definido por los valores de todas las variables o datos (propiedades) asociados al objeto.
- Su comportamiento, definido por las funciones y procedimientos (métodos) que el objeto es capaz de ejecutar.
Jerarquía.
En el sentido de que ciertos objetos son superiores a otros en cierto modo.
Sea una jerarquía simple o compleja, pueden distinguirse tres niveles:
- La raíz de la jerarquía. Se trata de un objeto único y especial. Se caracteriza por estar en el nivel más alto de la estructura.
- Los objetos intermedios. Son los que descienden directamente de la raíz y que a su vez tienen descendientes. Representan conjuntos, clases o tipos de objetos, que pueden ser muy generales o muy especializados. Podemos definir las clases como conjunto de objetos que comparten propiedades y funcionalidad.
- Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienen descendientes. Suelen llamarse casos particulares, instancias o ítems porque representan los elementos del conjunto representado por una clase o subclase a la que pertenecen.
Relaciones.
Las relaciones entre objetos son los enlaces (punteros) entre aquellos que forman parte de la misma organización.
- Las relaciones jerárquicas, son esenciales para la existencia misma de la aplicación porque la construyen. Son bidireccionales, es decir, un objeto es padre de otro cuando se encuentra situado inmediatamente encima de otro, que a su vez será hijo del primero. Una organización jerárquica simple puede definirse como aquella en la que un objeto puede tener un solo padre, mientras que una organización jerárquica compleja un hijo puede tener varios padres.
- Las relaciones semánticas, no tienen que ver con la organización. Sus propiedades y consecuencia solo dependen de los objetos en sí mismos (de su significado) y no de su posición en la organización.
- Las relaciones de composición, que permiten definir objetos compuestos, cuyas partes o componentes son otros objetos, pertenecientes a clases diferentes.
Propiedades.
Las propiedades de un objeto son información acerca de una instancia o elemento, es decir diferencia objetos de la misma clase.
Todo objeto puede tener cierto número de propiedades, cada una de las cuales tendrá, a su vez, uno o varios valores más o menos estructurados (matrices, vectores, listas, etc.).
Las propiedades corresponden a las clásicas "variables". Son datos encapsulados dentro de un objeto. Los valores pueden ser de cualquier tipo (numérico, alfabético, etc.) que el sistema de programación admita.
- Propiedades propias, están formadas dentro de la cápsula del objeto.
- Propiedades heredadas, están definidas en un objeto diferente, antepasado de éste (padre,"abuelo", etc.). Se poseen por el mero hecho de ser miembro de una clase.
Método.
Programa asociado a un objeto (o más bien a una clase de objetos). Los métodos actúan sobre las propiedades.
Son sinónimos de 'método' todos aquellos términos que se han aplicado tradicionalmente a los programas, como procedimiento, función, rutina, etc.
Un método no es más que una función asociada a un tipo de objeto:
- Métodos propios, están formados dentro de la cápsula del objeto.
- Métodos heredados, están definidos en un objeto diferente, antepasado de éste (padre,"abuelo", etc.). Se poseen por el mero hecho de ser miembro de una clase.
Herencia: propiedades y comportamientos de un objeto por pertenecer a una clase determinada.
- Herencia de métodos, se heredan los métodos (programas) asociados a dicha clase y a todas sus superclases.
- Herencia de propiedades, se heredan las propiedades (declaraciones de datos).
- Herencia de valores de las propiedades, se heredan los valores por defecto de las propiedades asociadas. (Esta herencia no se considera esencial)
- Herencia simple, cada objeto sólo puede pertenecer a una clase y heredar de ella.
- Herencia múltiple, un objeto puede pertenecer a más de una clase simultáneamente y heredar de todas ellas. (Esta forma de herencia no es esencial).
Mensaje, comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros.
La sintaxis del mensaje varía de acuerdo con el sistema OOP y el lenguaje de programación. En C++, por ejemplo, se escribe así:
En los últimos años y coincidiendo con el auge de Internet se han popularizado otros lenguajes muy utilizados para la creación de páginas Web.
Cuando en nuestro navegador, o cliente web, vemos una página web nos parece una sola entidad con enlaces a otras páginas, pero no es así, está compuesta por multitud de diferentes ficheros, como son las imágenes, los posibles vídeos y lo más importante: el código fuente.
El código de las páginas está escrito en un lenguaje llamado HTML, que indica básicamente donde colocar cada elemento y la forma que tendrán estos al ser colocados en la página.
En realidad el HTML no es lenguaje de programación en sentido estricto, sino, más bien, se trata de un lenguaje descriptivo que tiene como objeto dar formato al texto e imágenes que pretendemos visualizar en el navegador. HTML no permite realizar un simple cálculo matemático y mucho menos realizar operaciones con una base de datos.
Si el sitio es extenso y sus contenidos cambian rápidamente, nos interesa automatizar en la medida de lo posible todas las tareas para gestionar su explotación de la manera más óptima.
Esta automatización la podemos conseguir programando instrucciones con lenguajes del
- lado cliente, entre los cuales no sólo se encuentra el HTML sino también el Java y el JavaScript, y que interpreta directamente el navegador.
- lado servidor (ASP, PHP y PERL) que generan una página resultado, que solo contiene código HTML que es la que se envía al cliente donde es interpretada sin incompatibilidades.
Las páginas del cliente son muy dependientes del sistema donde se están ejecutando y esa es su principal desventaja, ya que cada navegador tiene sus propias características, incluso cada versión, y lo que puede funcionar en un navegador puede no funcionar en otro.
Características generales de un programa:
- Legibilidad, claro y sencillo; que facilite su lectura y comprensión a personas ajenas al programador (autor) de la aplicación.
- Fiabilidad, capaz de recuperse frente a errores o usos inadecuados por parte del usuario.
- Portabilidad, su diseño debe permitir la codificación en diferentes lenguajes. Debe ser fácil y posible su instalación en distintas máquinas.
- Modificabilidad, fácil de mantener, modificar y actualizar a nuevas situaciones.
- Eficiencia, aprovechamiento de los recursos disponibles.
Los programas deben ser diseñados, en lugar de lucubrados en un proceso aleatorio de crecimiento, ensayo y error.
- Perseguir la máxima modularidad.
- Anticiparse a los posibles errores.
- Establecer el flujo de información de entrada y salida.
Se refiere a que las distintas tareas estén bien diferenciadas y el empleo de funciones, procedimientos o subprogramas. Evita construcciones demasiado grandes y difíciles de modificar en caso de error.
Interesa mucho que los programas sean tan modulares como se pueda, para repartir su trabajo en partes individuales que realicen tareas independientes. Esto permite comprobar por separado su correcto funcionamiento y aislar la presencia de posibles errores, de forma que sea fácil su corrección.
La modularidad también es un factor para acelerar el trabajo de desarrollo de programas. La independencia de las partes facilita que recolocadas en forma distinta y tal vez con nuevos añadidos, sirven también para construir otros programas.