Está en la página 1de 8

4. Lenguajes actuales de programación.

Características
técnicas.
Gramática
Compilación
 Análisis
o Léxico
o Sintáctico
o Semántico
 Síntesis
o Generación código objeto
o Generación de código intermedio, para evitar la dependencia
del HW y SO de la compilación (virtualización)
 Primera pasada: fuente a la abstracción
 Segunda pasada: abstracción al detalle
 Optimización: mejorar el código intermedio, de modo que resulte un
código máquina más rápido de ejecutar

Enlazado: se enlaza el código de bajo nivel generado de todos los ficheros


y subprogramas que se han mandado compilar y se añade el código de las
funciones que hay en las bibliotecas del compilador para que el ejecutable
pueda comunicarse directamente con el sistema operativo.

Lenguaje máquina: ejecución directa, fuerte dependencia del HW (binario


puro)

Lenguajes simbólicos: distanciarnos del HW


 Lenguaje ensamblador: utiliza nemónicos o nemotécnicos que
sustituyen a un código de operación, necesita traducción, no es
portable depende del HW, programación de controladores.

1
 Lenguajes de alto nivel
o Instrucciones que representan la lógica del problema
 Programación estructurada utiliza las estructuras básicas
de programación: secuencial + condicional + iterativa
o Estructuras de datos

Portabilidad
 Dependencia del HW y SO
 Para pasar a otra máquina necesito compilar el código fuente

Especialización
 Propósito general
o APIs del lenguaje resuelven la mayor parte de los problemas:
Visual Basic (Basic), Delphi (Pascal), C++ (C), Java, C#
 Propósito específico
o Gestión: COBOL (Cobol .NET), RPG, PL1, SQL
o Científico: Fortran, MathLab, R (estadístico o big data)
o Inteligencia artificial o sistemas expertos: Lisp (funcional),
Prolog (lógico)
o Aplicaciones Web: PHP, Perl, Python, JavaScript, Vb script ->
siguen el modelo de traducción por interprete, además el
navegador web tiene un parser

Paradigmas de programación
“Representa un enfoque particular o filosofía para diseñar soluciones”
“Normas y procedimientos que indican la forma de organizar las tareas de
un programa compartidas por un conjunto de lenguajes de programación”
Actualmente, el paradigma de programación más utilizado es el paradigma
de la programación orientada a objetos.
En general la mayoría son variantes de los dos tipos principales, imperativa
y declarativa:
 Al nivel máquina: lenguaje máquina y ensamblador
o Ejecutivas: sumas, desplazamientos, XOR
o De control: salto incondicional (goto) y condicional
o De E/S
 Paradigma imperativo o por procedimientos (¿cómo?): modular
(máxima cohesión y mínimo acoplamiento) y estructurada (se
desaprueba el uso de goto). Es el más usado en general, se basa en
dar instrucciones al ordenador de como hacer las cosas en forma de
algoritmos. La programación imperativa es la más usada y la más
antigua,ejemplos de lenguajes puros de este paradigma serían el
Fortran, COBOL, C, ADA, BASIC o Pascal, pero también Eiffel, Java, C+
+, C#, Python

 Paradigma declarativo: está basado en describir el problema


declarando propiedades y reglas que deben cumplirse, en lugar de
instrucciones. Hay lenguajes para la programación funcional, la
programación lógica, o la combinación lógico-funcional. Unos de los
primeros lenguajes funcionales fueron Lisp y Prolog.

o Programación funcional: basada en la definición los


predicados y es de corte más matemático, está representado
por Scheme (una variante de Lisp) o Haskell.

2
o Programación lógica: basado en la definición de relaciones
lógicas, está representado por Prolog.

o Programación con restricciones: Similar a la lógica usando


ecuaciones. Casi todos los lenguajes son variantes del Prolog.

 Lenguaje específico del dominio o DSL: Se denomina así a los


lenguajes desarrollados para resolver un problema específico,
pudiendo entrar dentro de cualquier grupo anterior. El más
representativo sería SQL para el manejo de las bases de datos, de
tipo declarativo, pero los hay imperativos como el Logo.

 Paradigma Orientación a objetos (OO), primero fue el lenguaje

o Está basada en el imperativo, pero encapsula elementos


denominados objetos que incluyen tanto variables como
funciones. Está representado por C++ o el Java, pero el más
puro sería el Smalltalk.

o Clase: conjunto de objetos con atributos y métodos

 Abstracta

o Objeto: instanciación de una clase, solo existen en tiempo de


ejecución

o Tipo abstracto de datos

 Encapsular (interface)

 Operadores de alcance

 Public: visible para todos los objetos en el mismo


ámbito de visibilidad

 Private: solo visible para el objeto al que


pertenece (las clases hijas no van a heredar nunca
los atributos y métodos privados de la clase
padre)

 Protected: solo es visible ese atributo o método


desde una de las clases hijas y no desde otra
clase

 Por defecto: si no especificamos ningún


modificador de acceso se utiliza el nivel de acceso
por defecto, que consiste en que el elemento
puede ser accedido sólo desde las clases que
pertenezcan al mismo paquete.

3
 Static: no sirve para crear constantes, sino para
crear miembros que pertenecen a la clase, y no a
una instancia de la clase. No es necesario crear un
objeto de la clase para poder acceder a estos
atributos y métodos. Este es el motivo por el cual
es obligatorio que main se declare como static; de
esta forma no tenemos que ofrecer un constructor
vacío para la clase que contiene el método, o
indicar de alguna forma a la máquina virtual cómo
instanciar la clase. Un uso del modificador static
sería, por ejemplo, crear un contador de los
objetos de la clase que se han creado,
incrementando la variable estática en el
constructor.

 Native: es un modificador utilizado cuando un


determinado método está escrito en un lenguaje
distinto a Java, normalmente C, C++ o
ensamblador para mejorar el rendimiento. La
forma más común de implementar estos métodos
es utilizar JNI (Java Native Interface).

 volatile y synchronized. Volatile es, junto con


synchronized, uno de los mecanismos de
sincronización básicos de Java. Se utiliza este

4
modificador sobre los atributos de los objetos para
indicar al compilador que es posible que dicho
atributo vaya a ser modificado por varios threads
de forma simultanea y asíncrona, y que no
queremos guardar una copia local del valor para
cada thread a modo de caché, sino que queremos
que los valores de todos los threads estén
sincronizados en todo momento, asegurando así
la visibilidad del valor actualizado a costa de un
pequeño impacto en el rendimiento. Volatile es
más simple y más sencillo que synchronized, lo
que implica también un mejor rendimiento. Sin
embargo volatile, a diferencia de synchronized, no
proporciona atomicidad, lo que puede hacer que
sea más complicado de utilizar.

 Abstract. Un viejo conocido para la mayoría de


los programadores Java. La palabra clave abstract
indica que no se provee una implementación para
un cierto método, sino que la implementación
vendrá dada por las clases que extiendan la clase
actual. Una clase que tenga uno o más métodos
abstract debe declararse como abstract a su vez.

 Final. Indica que una variable, método o clase no


se va a modificar, lo cuál puede ser útil para
añadir más semántica, por cuestiones de
rendimiento, y para detectar errores. Si una
variable se marca como final, no se podrá asignar
un nuevo valor a la variable. Si una clase se marca
como final, no se podrá extender la clase. Si es un
método el que se declara como final, no se podrá
sobreescribir.

 Una variable con modificadores static y final


sería lo más cercano en Java a las constantes de
otros lenguajes de programación

o Polimorfismo y sobrecarga

 Polimorfismo es una palabra de origen griego que


significa “muchas formas”. Este termino se utiliza en la
POO para “referirse a la propiedad por la que es posible
enviar mensajes sintácticamente iguales
a objetos de tipos distintos“. Para metodos y
propiedades.

 Las Interfaces sirven para establecer la forma que debe


de tener una clase (implements).

 Clase abstracta pura, con todos sus métodos abstractos,


es decir, obligatoriamente se implementan en las clases
hijas.

5
 Sobrecarga (@Override), especialización de métodos,
cuando en na clase existen dos métodos con idéntico
nombre pero con distintos parámetros.

o Herencia (extends): una clase asume como propios los atributs


y métodos definids por otra (clase padre)

o Herencia múltiple

o Enlace dinámico o dynamic binding o enlace tardío. Retrasar


hasta el instante de ejecución la asociación tipo y objeto, en
cualquier otro paradigma se realiza en tiempo de compilación.

 Paradigma de la programación orientada a Aspectos: es un


paradigma de programación relativamente nuevo (aspect-oriented
programming AOP) cuya intención es permitir una adecuada
modularización de las aplicaciones y posibilitar una mejor separación
de responsabilidades (obligación o correspondencia de hacer algo).
Se pueden encapsular los diferentes conceptos que componen una
aplicación en entidades bien definidas, eliminando las dependencias
entre cada uno de los módulos. De esta forma se consigue razonar
mejor sobre los conceptos, se elimina la dispersión del código y las
implementaciones resultan más comprensibles, adaptables y
reusables. Ejemplos:

o C++ -> AspectC++


o Java
 AspectJ es una extensión Java del proyecto Eclipse.
 AOP con SpringFramework 2.5 es un Framework de Java
que permite programar en el paradigma de Aspectos
utilizando Anotación Java
o Perl -> Aspect, disponible en CPAN.
o PHP
 PHP-AOP (AOP.io) es una lib.
 phpAspect es una extensión PHP para implementar el
paradigma de la POA, mediante árboles de decisión XML.
 FLOW3 es un framework MVC de PHP incluye un módulo
AOP.
o Python -> Aspyct AOP.

 Programación multiparadigma: es el uso de dos o más


paradigmas dentro de un programa. Es realmente común el diseño
de lenguajes que soporten múltiples paradigmas de programación.
Estos lenguajes son aquellos que soportan al menos dos
paradigmas.

o Scala: Imperativo, orientado a objetos, funcional, genérico y


concurrente

o Erlang: Funcional, concurrente y distribuido

o Perl: Imperativo, orientado a objetos y funcional

6
o PHP: Imperativo, orientado a objetos, funcional y reflexivo

o JavaScript: Imperativo, orientado a objetos (prototipos) y


funcional

o Java: Imperativo, orientado a objetos, reflexivo y genérico

o Python y Ruby: Imperativo, orientado a objetos, reflexivo y


funcional

o C++: Imperativo, orientado a objetos, funcional y genérico

o C#: Imperativo, orientado a objetos, funcional (lambda),


reflexivo y genérico

o Lisp: orientado a objetos, funcional, declarativo

o Prolog: lógico y declarativo

Estos son algunos ejemplos, existen lenguajes como Oz que soporta


nueve paradigmas de programación, para algunos es un acierto y
para otros un error.
Un ejemplo son los lenguajes multiplataforma.

7
ALGORITMO
Conjunto de acciones o secuencia de operaciones que ejecutadas en un
determinado orden resuelven el problema
PSEUDOCODIGO -> lenguaje natural
DIAGRAMA DE FLUJO U ORDINOGRAMA
INSTRUCCIÓN
Tarea elemental
PROGRAMA
Conjunto de instrucciones -> E + (declaración variables – instrucciones) + S
LENGUAJE DE PROGRAMACION
Conjunto de normas que permiten escribir un programa
SUBRUTINA O SUBPROGRAMA
Fragmento de programa que resuelve un subproblema
FUNCION -> subprograma de n entradas y 1 salida
PROCEDIMIENTO -> subprograma de n entradas y n salidas
COMPILADOR
Traductor lenguaje alto nivel -> programa objeto en código máquina
INTERPRETE
Traductor que realiza la compilación paso a paso (no genera código
intermedio)
LENGUAJES MAQUINA (binario puro – Ejecutivas, de control y de E/S)
LENGUAJES SIMBOLICOS
ENSAMBLADOR -> cada instrucción lenguaje maquina un nombre
nemotécnico
LENGUAJES DE ALTO NIVEL (LAN)
LENGUAJES ORIENTADOS A OBJETOS (LOOS)
Clase
Objetos
Tipos abstractos de datos (TDA) o encapsulación
Polimorfismo/Sobrecarga
Herencia
Enlace dinámico
Tipos de LOOS
LENGUAJE MULTIPLATAFORMA (Java, C#, Python)
LENGUAJES DE CUARTA GENERACION: SQL (4GL)
DDL
DML
DCL

También podría gustarte