Download El lenguaje de programación - ITP-ProgramacionOO

Document related concepts

Haxe wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Lisp wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Programación funcional wikipedia , lookup

Transcript
INSTITUTO TECNOLOGICO DE PINOTEPA
SUBDIRECCION ACADEMICA
DEPARTAMENTO DE CIENCIAS ECONOMICO ADMINISTRATIVO
“SISTEMAS COMPUTACIONALES”
Alumno:
ADOLFO HERNÁNDEZ OCHOA
Catedrático (a)
CAROLINA
Materia
FUNDAMENTOS DE PROGRAMACIÓN
TEMA
“CARACTERISTICAS DEL LENGUAJE DE PROGRAMACION ”
Primer Semestre
Santiago Pinotepa Nacional, Octubre de 2011.
ADOLFO HERNANDEZ OCHOA
Página 1
LENGUAJES DE PROGRAMACION
Un lenguaje
de
programación es
un idioma
artificial diseñado
para
expresar computaciones que pueden ser llevadas a cabo por máquinas como
las computadoras. Pueden usarse para crear programas que controlen el
comportamiento físico y lógico de una máquina, para expresar algoritmos con
precisión, o como modo de comunicación humana.1 Está formado por un conjunto
de símbolos y reglas sintácticas y semánticas que definen su estructura y el
significado de sus elementos y expresiones. Al proceso por el cual se escribe, se
prueba, se depura, se compila y se mantiene el código fuente de un programa
informático se le llama programación.
También la palabra programación se define como el proceso de creación de
un programa de computadora, mediante la aplicación de procedimientos lógicos, a
través de los siguientes pasos:

El desarrollo lógico del programa para resolver un problema en particular.

Escritura de la lógica del programa empleando un lenguaje de programación
específico (codificación del programa).

Ensamblaje o compilación del programa hasta convertirlo en lenguaje de
máquina.

Prueba y depuración del programa.

Desarrollo de la documentación.
Existe un error común que trata por sinónimos los términos 'lenguaje de
programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los
lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para
el marcado de páginas web que no es propiamente un lenguaje de programación,
sino un conjunto de instrucciones que permiten diseñar el contenido de los
documentos).
Permite especificar de manera precisa sobre qué datos debe operar una
computadora, cómo deben ser almacenados o transmitidos y qué acciones debe
tomar bajo una variada gama de circunstancias. Todo esto, a través de
un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural.
Una característica relevante de los lenguajes de programación es precisamente
que más de un programador pueda usar un conjunto común de instrucciones que
ADOLFO HERNANDEZ OCHOA
Página 2
sean comprendidas entre ellos para realizar la construcción de un programa de
forma colaborativa.
Características
Propiedades

Un núcleo del lenguaje simple, con funcionalidades añadidas importantes,
como funciones matemáticas y de manejo de archivos, proporcionadas
por bibliotecas.

Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno
de los más empleados es el estructurado "no llevado al extremo" (permitiendo
ciertas licencias de ruptura).

Un sistema de tipos que impide operaciones sin sentido.

Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como
definir macros e incluir múltiples archivos de código fuente.

Acceso a memoria de bajo nivel mediante el uso de punteros.

Interrupciones al procesador con uniones.

Un conjunto reducido de palabras clave.

Por defecto, el paso de parámetros a una función se realiza por valor. El paso
por referencia se consigue pasando explícitamente a las funciones las
direcciones de memoria de dichos parámetros.

Punteros a funciones y variables estáticas, que permiten una forma
rudimentaria de encapsulado y polimorfismo.

Tipos de datos agregados (struct) que permiten que datos relacionados (como
un empleado, que tiene un id, un nombre y un salario) se combinen y se
manipulen como un todo (en una única variable "empleado").
Carencias

Recolección de basura nativa, sin embargo se encuentran a tal efecto
bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector
de basura de Boehm.

Soporte para programación orientada a objetos, aunque la implementación
original de C++ fue un preprocesador que traducía código fuente de C++ a C.

Encapsulación.

Funciones anidadas, aunque GCC tiene esta característica como extensión.
ADOLFO HERNANDEZ OCHOA
Página 3

Polimorfismo en tiempo de código en forma de sobrecarga, sobrecarga de
operadores y sólo dispone de un soporte rudimentario para la programación
genérica.

Soporte nativo para programación multihilo y redes de computadores.
Aunque la lista de las características útiles de las que carece C es larga, este
factor ha sido importante para su aceptación, porque escribir rápidamente
nuevos compiladores para nuevas plataformas, mantiene lo que realmente hace el
programa bajo el control directo del programador, y permite implementar la
solución más natural para cada plataforma. Ésta es la causa de que a menudo C
sea más eficiente que otros lenguajes. Típicamente, sólo la programación
cuidadosa en lenguaje ensamblador produce un código más rápido, pues da
control total sobre la máquina, aunque los avances en los compiladores de C y la
complejidad creciente de los microprocesadores modernos han reducido
gradualmente esta diferencia.
En algunos casos, una característica inexistente puede aproximarse. Por ejemplo,
la implementación original de C++ consistía en un preprocesador que traducía
código fuente C++ a C. La mayoría de las funciones orientadas a objetos incluyen
un puntero especial, que normalmente recibe el nombre "this", que se refiere al
objeto al que pertenece la función. Mediante el paso de este puntero como un
argumento de función, esta funcionalidad puede desempeñarse en C. Por ejemplo,
en C++ se puede escribir:
stack.push(val);
Mientras que en C, se podría escribir:
push(stack, val);
Donde el argumento stack es un puntero a
puntero this de C++, que es un puntero a un objeto.
una struct equivalente
al
Características de algunos Lenguajes
Ada
Lenguaje de programación diseñado por Jean Ichbiah de Cii Honeywell Bull por
encargo del Departamento de Defensa de los EE.UU. para unificar el uso de los
lenguajes de programación en los proyectos que le fuesen entregados. Es un
ADOLFO HERNANDEZ OCHOA
Página 4
lenguaje diseñado con la seguridad en mente y es multipropósito, pudiendo llegar
desde la facilidad de Pascal a la flexibilidad de C pero con una filosofía orientada a
la reducción de errores.
Su nombre conmemora a la condesa Ada Lovelace, hija de Lord Byron, a quien se
considera la primera programadora de la Historia, por su relación con Charles
Babbage, creador de la máquina analítica. El Departamento de Defensa de los
Estados Unidos (DoD) y los ministerios equivalentes de varios países europeos
exigen la utilización de este lenguaje en los proyectos realizados bajo su
patrocinio. También es usado en otros entornos en los que también se necesita
una gran seguridad como la gestión del tráfico aéreo (en empresas como Boeing o
la española Indra).
Ada se diseñó de manera que permita evitar los errores comunes y difíciles de
descubrir. Esto puede hacer que sea muy irritante para los programadores
principiantes.
Hasta la fecha la ISO ha publicado dos ediciones del estándar de Ada: la original
Ada 83 que incluía conceptos novedosos como las excepciones y la programación
genérica; y la revisión Ada 95, que entre otras cosas añadió la capacidad de
herencia para completar sus características de lenguaje OOP.
Un compilador de Ada muy usado es GNAT, originalmente desarrollado por la
Universidad de Nueva York y mantenido en la actualidad por Ada Core
Technologies. Está basado en la tecnología de GCC y es software libre.
Ejemplo: «Hola Mundo» en Ada es:
with Ada.Text_IO; use Ada.Text_IO;
procedure Hola_Mundo is
begin
Put_Line ("Hola Mundo");
end;
ADOLFO HERNANDEZ OCHOA
Página 5
Aquí abajo hay un ejemplo más elaborado (función de Ackermann) de código
fuente escrito en Ada, para mostrar sus rasgos principales.
with Ada.Command_Line; use Ada.Command_Line;
with Ada.Text_Io; use Ada.Text_Io;
procedure Ackermann is
function ack (x : integer; y: integer) return integer is
begin
if x = 0 then
return y + 1;
elsif y = 0 then
return ack(x-1,1);
else
return ack(x-1,ack(x,y-1));
end if;
end ack;
x,y,a : integer;
begin
if Argument_Count = 2 then
x := Integer'Value (Argument(1));
y := Integer'Value (Argument(2));
elsif Argument_Count = 1 then
x := 3;
y := Integer'Value (Argument(1));
else
ADOLFO HERNANDEZ OCHOA
Página 6
x := 3;
y := 3;
end if;
a := ack (x,y);
Put ("Ack (" & Integer'Image (x) & ",");
Put_Line (Integer'Image (y) & ") = " & Integer'Image (a));
end Ackermann;
Podemos observar que:
La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no
conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las
palabras clave, en la filosofía de que un programa se escribe una vez, se modifica
decenas de veces y se lee miles de veces (legibilidad es más importante que
rapidez de escritura).
Todo es case-insensitive. Ya que todo el entorno Unix es case-sensitive, a algunos
programadores de Unix no les gusta este rasgo de Ada.
En este caso, todo el programa es un solo procedimiento, que puede contener
subprogramas (procedimientos o funciones) (en este caso: la función ack).
Cada sentencia se cierra con un end qué_cerramos. Es un modo de evitar errores
y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque
todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen.
Se asigna un valor con :=, se comparan dos valores con =. A los programadores
de C les puede confundir este rasgo inspirado en Pascal.
La sintaxis de atributos es objeto'atributo (o tipo'atributo) (nota: esto sólo aplica a
los objetos predefinidos, ya que no es el concepto de atributo típico de OOP).
Se distingue entre "procedimientos" (subrutinas que no devuelven ningún valor
pero pueden modificar sus parámetros) y "funciones" (subrutinas que devuelven
un valor y no modifican los parámetros). La mayoría de lenguajes de programación
no hacen esta distinción, sin embargo las funciones de Ada favorecen la seguridad
al reducir los posibles efectos colaterales, pues no tienen parámetros in out.
ADOLFO HERNANDEZ OCHOA
Página 7
Smalltalk
Diseñado por Alan Kay durante los años setenta en el Palo Alto Reasearch
Institute de Xerox (conocido como Xerox Parc). Smalltalk era un elemento de la
primera computadora personal con interfaz gráfica el "Alto" (que nunca fue llevado
al mercado pero de cuyas ideas nació el Macintosh).
Smalltalk es considerado el primero de los lenguajes orientados a objetos (OOP).
En Smalltalk TODO es un objeto.. aun los números enteros. Smalltalk se basó en
ideas de Simula (un lenguaje de simulaciones).
Pero Smalltalk no es meramente un lenguaje, sino un entorno completo,
prácticamente un sistema operativo que se ejecuta encima de una "máquina
virtual". Esto asegura su máxima portabilidad entre plataformas.
A pesar de ser un lenguaje muy simple, muy poderoso, y que promueve buenas
prácticas de programación, Smalltalk (hasta el 2002) no había llegado a ser un
lenguaje muy popular. Esto se debe a la poca aceptación de lenguajes
interpretados en los años 1980 y 1990. A pesar de esto algunas empresas como
Digitalk, VisualWorks e IBM llegaron a tener relativo éxito con la plataforma como
una herramienta de desarrollo rápido que competía contra herramientas como
PowerBuilder y en menor grado contra VisualBasic que eran muy populares en los
años 80 y 90.
En 1995, Sun Microsystems lanzó Java que es un lenguaje fuertemente
influenciado por Smalltalk. Un lenguaje que popularizaría el concepto de lenguajes
interpretados con recolectores de basura.
Ejemplos de Smalltalk:
En Smalltalk todo es un objeto, y a un objeto le enviamos mensajes. Por ejemplo:
1+1
Significa que al objeto "1" le enviamos el mensaje "+" con el parámetro "1". Este
ejemplo entonces resulta en el valor "2".
Java
Plataforma de software desarrollada por Sun Microsystems. Esta plataforma ha
sido desarrollada de tal manera que los programas desarrollados para ella puedan
ejecutarse de la misma forma en diferentes tipos de arquitecturas y dispositivos
computacionales.
ADOLFO HERNANDEZ OCHOA
Página 8
La plataforma Java consta de tres partes:
El lenguaje de programación
Máquina virtual de Java
API Java
Originalmente llamado OAK por Ingenieros de Sun Microsystems, Java fue
diseñado para correr en computadoras embebidas. Sin embargo, en 1995, dada la
atención que estaba produciendo la Web, Sun Microsystems la distribuyó para
sistemas operativos tales como Microsoft Windows.
El lenguaje mismo adopta la sintaxis de C++, pero su funcionamiento es muy
similar al de Smalltalk. Incorpora sincronización y manejo de tareas en el lenguaje
mismo (similar a Ada) e incorpora interfaces como un mecanismo alternativo a la
herencia múltiple de C++.
A fines del siglo XX, Java llegó a ser el lenguaje de mayor acogida para
programas de servidor. Utilizando una tecnología llamada JSP (similar a ASP de
Microsoft), se hizó muy fácil escribir páginas dinámicas para sitios de Internet.
Sumado a esto, la tecnología de JavaBeans, al incorporarse con JSP, permitía
utilizar el patrón MVC (Modelo-Vista-Controlador) que ya tanto se había aplicado a
interfaces gráficas.
Java llegó a ser extremadamente popular cuando Sun Microsystems introdujo la
plataforma y el modelo de programación J2EE (Java 2 Enterprise Edition). Este
modelo permite una separación entre la presentación de los datos al usuario (JSP
o Applets), el modelo de datos (EJB), y el control (Servlets). Enterprise Java
Beans (EJB) que es una tecnología de objetos distribuídos que pudo lograr el
sueño de muchas empresas como Microsoft e IBM de crear una plataforma de
objetos distribuídos con un monitor de transacciones. Con este nuevo estándar,
empresas como BEA, IBM, Sun Microsystems, Oracle y otros crearon nuevos
"servidores de aplicaciones" que tuvieron gran acogida en el mercado.
Además de programas del servidor, Java permite escribir programas de interfaz
gráfica o textual. Además se pueden correr programas de manera incorporada o
embebida en los navegadores web de Internet, aunque esto nunca llegó a
popularizarse como se esperaba en un principio.
Los programas en Java generalmente son compilados a un lenguaje intermedio o
bytecode, y luego interpretados por una máquina virtual (JVM). Esta última sirve
como una plataforma de abstracción entre la máquina y el lenguaje permitiendo
ADOLFO HERNANDEZ OCHOA
Página 9
que se pueda "escribir el programa una vez, y correrlo en cualquier lado". También
existen compiladores nativos de Java, tanto comercial como libre. El compilador
GCC de GNU compila Java a código de máquina con algunas limitaciones al año
2002.
Ejemplo:
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HolaMundo extends javax.swing.JFrame {
public static void main(String[] args) {
System.out.println("Vamos
\"HolaMundo\"");
a
crear
una
ventana
que
ponga
new HolaMundo();
}
public HolaMundo() {
super("HolaMundo");
JLabel etiqueta = new JLabel("HolaMundo");
etiqueta.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
getContentPane().add(etiqueta);
setSize(400,200);
addWindowListener(
new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
System.exit(0);
ADOLFO HERNANDEZ OCHOA
Página 10
}
}
);
setVisible(true);
}
}
C Más Más
C++ (pronunciado "C plus plus" o "C más más", por algunos programadores de
habla hispana) es un lenguaje de programación, diseñado a mediados de los
ochenta, por Bjarne Stroustrup, como extensión del lenguaje de programación C.
Es un lenguaje híbrido, que se puede compilar y resulta más sencillo de aprender
para los programadores que ya conocen C. Actualmente existe un estándar,
denominado ISO C++, al que se han adherido la mayoría de los fabricantes de
compiladores más modernos. Existen también algunos intérpretes como
ROOT (http://root.cern.ch/) (enlace externo). Las principales características del
C++ son abstracción (encapsulación), el soporte para programación orientada a
objetos (polimorfismo) y el soporte de plantillas o programación genérica
(Templates). Las plantillas se las define de la manera siguiente: template
<parámetros> declaración X y se las instancia con X<parámetros>.
Pero añade otra serie de propiedades que se encuentran más difícilmente en otros
lenguajes de alto nivel:
Posibilidad de redefinir los operadores
Indentificación de tipos en tiempo de ejecución (RTTI)
El nombre C++ fue propuesto por Rick Masciatti en el año 1983, cuando el
lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se
había usado el nombre "C con clases". En el C++, "C++" significa "uno más de C"
y se refiere a que C++ es una extensión del C.
ADOLFO HERNANDEZ OCHOA
Página 11
Algunos dicen que "C++" todavía significa "C", porque "++" en este caso es el
operador de la postincrementación, es decir, aumenta el valor de la expresión a la
que se refiere, después, en las instrucciones siguientes. Por esto el valor de la
expresión en este momento permanece original.
Aquí hay un programa de ejemplo escrito en C++:
#include <iostream>
int main()
{
std::cout << "¡Hola mundo!" << std::endl;
}
Pascal
Pascal es un lenguaje de programación de alto nivel, desarrollado por Niklaus
Wirth. Se convirtió en uno de los lenguajes extensamente usados en lo cursos de
introducción a la programación, pues fue bien recibido como lenguaje de
enseñanza para estudiantes universitarios. Pascal es un lenguaje con técnicas de
programación estructurada, dicha programación hace programadores
disciplinados.
Sus primeras versiones datan de 1970. Es un lenguaje de programación
estructurado creado por Niklaus Wirth, un profesor del Instituto tecnológico de
Zurich, que lo creó pensando en un lenguaje didáctico que enseñase la
programación como "una disciplina sistemática basada en determinados
conceptos fundamentales". Estos conceptos más tarde se tornarían motivo de
controversia entre los que creen que este lenguage tiene utilidad limitada a los
medios academicos, como Brian W. Kernighan.
A partir de los años setenta se convirtió en el sucesor de ALGOL en el entorno
universitario. Pascal permite construir programas muy legibles. Wirth es también
autor del lenguaje Modula-2 y de Oberon.
ADOLFO HERNANDEZ OCHOA
Página 12
El lenguaje de programación Delphi es una versión orientada a objetos moderna
del lenguaje Pascal y es ampliamente utilizada en la industria de software.
Ejemplo:
PROGRAM Ejemplo(INPUT, OUTPUT);
FUNCTION PreguntaNombre:STRING;
VAR
nombre:STRING;
BEGIN
REPEAT
WRITELN('Ingresa tu nombre:');
READLN(nombre);
UNTIL nombre <> '';
PreguntaNombre := nombre;
END;
PROCEDURE Saluda;
VAR
nombre:STRING;
BEGIN
nombre := PreguntaNombre;
IF nombre = 'wirth' THEN
WRITELN('Hola señor Wirth!');
ELSE
WRITELN('Hola '+nombre);
ADOLFO HERNANDEZ OCHOA
Página 13
END;
BEGIN
Saluda;
END.
En la ciencia de la computación, Pascal es uno de los hitos de lenguajes de
programación el cual tiene definido la programación de computadora y esta
todavía en uso hoy en día.
Niklaus Wirth lo desarrollo para hacer posible la programación estructurada que
seria mas fácil para un compilador para procesar. Pascal se baso en el lenguaje
de programación Algol y su nombre se debe en honor del matemático Blaise
Pascal. Wirth también desarrollo Modula-2 y Oberon, lenguajes similares a Pascal
el cual también soporta programación orientada a objetos.
ADOLFO HERNANDEZ OCHOA
Página 14