Está en la página 1de 8

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE INGENIERIA Y ARQUITECTURA


ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS
INTRODUCCION A LA INFORMATICA – Ciclo I 2020
UNIDAD I: TECNOLOGIA DE DESARROLLO DE APLICACIONES

Objetivo de la Unidad
Identificar las características básicas relacionadas al ámbito del desarrollo de aplicaciones
informáticas

Objetivos Específicos:
1. Diferenciar los paradigmas de programación que existen.
2. Clasificar los distintos lenguajes de programación según su uso.
3.

Contenido de la unidad, semana 1:


1. Paradigmas de Programación – Clasificación
1.1 Programación Estructurada
1.2 Programación Declarativa
1.3 Programación Orientada a Objetos
1.4 Programación Orientada por Eventos
2 Lenguajes de Programación
2.1 Bajo y Alto Nivel
2.2 Programación Imperativa y Declarativa
2.3 Intérpretes
2.4 Compiladores

1. Paradigmas de Programación – Clasificación

Un paradigma de programación es una propuesta tecnológica adoptada por una comunidad de


programadores y desarrolladores cuyo núcleo central es incuestionable en cuanto que únicamente
trata de resolver uno o varios problemas claramente delimitados; la resolución de estos problemas
debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la
ingeniería de software.

Un paradigma de programación representa un enfoque particular o filosofía para diseñar soluciones.


Los paradigmas difieren unos de otros, en los conceptos y la forma de abstraer los elementos
involucrados en un problema, así como en los pasos que integran su solución del problema, en otras
palabras, el cómputo.

Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de


definición. Es un estilo de programación empleado.

Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso, porque


nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.

El paradigma de programación que actualmente es el más utilizado es la "orientación a objetos" (OO).


El núcleo central de este paradigma es la unión de datos y procesamiento en una entidad llamada
"objeto", relacionable a su vez con otras entidades "objeto".

Tradicionalmente, datos y procesamiento se han separado en áreas diferentes del diseño y la


implementación de software. Esto provocó que se tuvieran problemas de fiabilidad, mantenimiento,
adaptación a los cambios y escalabilidad. Con la OO y características como el encapsulado,

1
polimorfismo o la herencia, se permitió un avance significativo en el desarrollo de software a cualquier
escala de producción.

A medida que la tecnología de las computadoras fue evolucionando, también han ido
cambiando las formas o estilos de programar; se han propuesto varios p a r a d i g m a s
de programación cuyo objetivo principal es mejorar tanto el diseño de programas como su
mantenimiento.

1.1 Programación Estructurada

La Programación Estructurada (PE) es una metodología que consiste en aplicar un conjunto de


técnicas que permiten programar de forma fácil, ordenada y eficaz. Utilizando la Programación
Estructurada se obtienen ventajas tales como:

Permite diseñar fácilmente, programas efectivos y correctos.


La depuración del programa es mucho más fácil.
El programa generado puede ser utilizado por cualquier usuario.
El diseño de programas se vuelve una tarea sistemática.
El mantenimiento o modificación de los programas es más rápido y fácil.

Un programa diseñado con este estilo de programación, consta de instrucciones que describen la
solución del problema. Las técnicas fundamentales de Programación Estructurada son cuatro:
Lógica Estructurada, Documentación, Análisis Estructurado y Estructuras de Datos.

La lógica estructurada es una técnica de programación, que ayuda a diseñar sistemáticamente


algoritmos libres de errores y que al ejecutarlos (o seguirlos) se obtenga la información requerida
en el problema. Un algoritmo correcto es aquel que no tiene errores y además hace lo que se
espera que haga; es decir, genera resultados correctos. Se debe recordar que un algoritmo consiste
en un conjunto de pasos que se deben obedecer al pie de la letra para solucionar el problema, la
técnica de Lógica Estructurada consiste en resolver los problemas, o diseñar algoritmos, con
únicamente tres posibles acciones:

1. Secuenciación: Se obedece una orden tras otra, sin ninguna consideración adicional.
2. Selección: Se elige una entre dos o más alternativas posibles para obedecer.
3. Repetición: Se repiten una o varias órdenes, las veces que sea necesario.

A estas posibles acciones se les conoce como Estructuras Lógicas de Control, ya que indican
qué hacer en cada paso del algoritmo y cómo hacerlo. Las estructuras lógicas de control se dividen
en:
 Secuenciación  Seleccionar Caso
Fundamentales  Si_ Entonces_Sino Derivadas  Desde_Hasta
 Mientras  Hasta Que

1.2 Programación Declarativa

Es uno de los paradigmas pioneros en los estilos de programación. Desarrolla programas


especificando o “declarando” un conjunto de condiciones, proposiciones, restricciones, ecuaciones
o transformaciones que describen el problema y detallan su solución; sin especificar exactamente
cómo encontrarla.

2
En la Programación Declarativa, las sentencias que se utilizan describen el problema que se quiere
solucionar, pero no las sentencias necesarias para resolverlo. Dicho de otra manera, más que el
Cómo desarrollar un proceso, interesa el Qué se desea obtener a través del programa.

1.3 Programación Orientada a Objetos

La Programación Orientada a Objetos (POO), ha tomado las mejores ideas de la programación


estructurada y las ha combinado con varios conceptos nuevos y potentes que incitan a contemplar
las tareas de programación d e s d e u n n u e v o p u n t o d e v i s t a . La P O O , p e r m i t e
descomponer más fácilmente un problema en subgrupos de partes relacionadas del problema.

Este paradigma de programación, usa objetos y sus interacciones para diseñar programas
informáticos, los conceptos más representativos de este paradigma son:

Objeto: es una estructura de datos y conjunto de procedimientos que operan sobre dicha
estructura. Una definición más completa de objeto es: una entidad de programa que consiste en
datos y todos aquellos procedimientos que pueden manipular aquellos datos; el acceso a los datos
de un objeto es solamente a través de estos procedimientos, únicamente estos procedimientos
pueden manipular, referenciar y/o modificar estos datos.

Para poder describir todos los objetos de un programa, conviene agrupar éstos en clases. Una Clase
es una colección de objetos que poseen características y operaciones comunes. Una clase
contiene toda la información necesaria para crear nuevos objetos. Una clase es un tipo definido que
determina la estructura de datos y las operaciones asociadas a ese tipo. Se puede ver como una
plantilla que describe objetos que van a tener la misma estructura y el mismo comportamiento.

Este tipo de programación está basado en varias técnicas, entre ellas: Herencia, Abstracción,
Polimorfismo y Encapsulamiento. Son ejemplos de Lenguajes Orientados a Objetos (LOO): C # ,
C++, Java

1.4 Programación Orientada por Eventos

La Programación Dirigida u Orientada por Eventos es un estilo de programación en el que tanto la


estructura como la ejecución de los programas van determinados por los sucesos que ocurran en
el sistema, definidos por el usuario o que ellos mismos provoquen.

El creador de un programa dirigido por eventos debe definir los eventos que manejarán su
programa y las acciones que se realizarán al producirse cada uno de ellos, lo que se conoce como
el Administrador del Evento. Los eventos soportados estarán determinados por el lenguaje de
programación utilizado, por el sistema operativo e incluso por eventos creados por el mismo
programador.

En la programación dirigida por eventos, al comenzar la ejecución del programa se llevarán a cabo
las inicializaciones y demás códigos iniciales y, a continuación, el programa quedará bloqueado
hasta que se produzca algún evento. Cuando alguno de los eventos esperados por el programa
tenga lugar, el programa pasará a ejecutar el código del correspondiente Administrador del Evento.
Por ejemplo, si el evento consiste en que el usuario ha hecho click en el botón de play de un
reproductor de películas, se ejecutará el código del Administrador del Evento, que será el que haga
que la película se muestre por pantalla.

Un ejemplo claro de este paradigma se tiene en los sistemas de programación Visual, en los que a
cada elemento del programa (objetos, controles, etc.) se le asignan una serie de eventos que
generará dicho elemento, como la pulsación de un botón del ratón sobre él o el redibujado del control

3
1.5 Otros tipos de programación

La Programación Funcional está basada en la definición los predicados y es de corte más


matemático, está representada por Scheme (una variante de Lisp) o Haskell.

La Programación Lógica está basada en la definición de relaciones lógicas, está representada por
Prolog.

La Programación con Restricciones es similar a la lógica usando ecuaciones. Casi todos los
lenguajes son variantes del Prolog.

La Programación Multiparadigma: es el uso de dos o más paradigmas dentro de un programa. El


lenguaje Lisp se considera multiparadigma.

Se denomina Lenguaje Específico del Dominio o DSL, 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.

Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la


práctica es habitual que se mezclen, dando lugar a la programación multiparadigma o lenguajes de
programación multiparadigma. Actualmente, el paradigma de programación más utilizado es el
paradigma de la programación orientada a objetos.

Por un lado, la Programación Imperativa, en contraposición a la programación declarativa, es un


paradigma de programación que describe la programación en términos del estado del programa y
sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones
que le indican al computador cómo realizar una tarea.

La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el


hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al
computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores
implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo
del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el
lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).

Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen
el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de
computadora, son también conceptos familiares similares en estilo a la programación imperativa;
donde cada paso es una instrucción. Son aquellos cuyos valores son atómicos y están formados por
elementos en un caso especial.

Los primeros lenguajes imperativos fueron los lenguajes de máquina de los computadores originales.
En estos lenguajes, las instrucciones fueron muy simples, lo cual hizo la implementación de hardware
fácil, pero obstruyendo la creación de programas complejos. Fortran, cuyo desarrollo fue iniciado en
1954 por John Backus en IBM, fue el primer gran lenguaje de programación en superar los obstáculos
presentados por el código de máquina en la creación de programas complejos.

Por otro lado, la Programación Declarativa, en contraposición a la programación imperativa es un


paradigma de programación que está basado en el desarrollo de programas especificando o
"declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o

4
transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante
mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a
la computadora qué es lo que se desea obtener o qué es lo que se está buscando). No existen
asignaciones destructivas, y las variables son utilizadas con Transparencia Referencial.

En la programación imperativa se describe paso a paso un conjunto de instrucciones que deben


ejecutarse para variar el estado del programa y hallar la solución; es decir, un algoritmo en el que se
describen los pasos necesarios para solucionar el problema.

En la programación declarativa las sentencias que se utilizan lo que hacen es describir el problema
que se quiere solucionar. Se programa diciendo lo que se quiere resolver pero a nivel de usuario,
pero no las instrucciones necesarias para solucionarlo. Esto último se realizará mediante mecanismos
internos de inferencia de información a partir de la descripción realizada.

2. Clasificación de los Lenguajes de Programación

Lenguaje de Programación es el conjunto de reglas y vocablos que rigen la escritura de un


programa, Otro concepto que podemos tener sobre el mismo tópico es: un conjunto de símbolos que
combinados entre sí, junto con un grupo de reglas sintácticas, permiten expresar los datos e
instrucciones necesarios para que las ó r d e n e s sean ejecutadas por la computadora.

Existe una diversidad de clasificaciones en cuanto a los lenguajes de programación que se utilizan,
esta clasificación, está en concordancia con la el paradigma de programación que respalda, con el
nivel de acercamiento al lenguaje humano, etc.

2.1. Bajo y Alto Nivel

Esta clasificación tiene su base en que tan dependiente o independiente sea un lenguaje de
programación respecto a la arquitectura o el hardware de la computadora y se clasifican como:

a) Bajo nivel: Utilizan vocablos directamente entendibles por el CPU de la computadora. Por
ejemplo: Lenguaje de máquina y lenguaje ensamblador.

b) Alto nivel: Utilizan lenguajes parecidos al lenguaje humano pero no entendible para el CPU, por
lo cual deben ser traducidos a un lenguaje computacional de bajo nivel. Por ejemplo: Basic, Pascal,
C, COBOL, FORTRAN, Java, etc.

2.2. Lenguajes de Programación Imperativa y Declarativa

La Programación Imperativa o Por Procedimientos, es la forma más usada en general. Se basa en


dar instrucciones al ordenador de cómo hacer las cosas en forma de algoritmos. La programación
imperativa es la más usada y la más antigua, el ejemplo principal es el Lenguaje de Máquina.
Ejemplos de lenguajes puros de este paradigma serían el C, BASIC o Pascal.

La Programación Orientada a Objetos está basada en el imperativo, pero encapsula elementos


denominados objetos que incluyen tanto variables como funciones. Está representado por C++ o el
Java.

La Programación Dinámica está definida como el proceso de romper problemas en partes pequeñas
para analizarlos y resolverlos de forma más óptima, busca resolver problemas en n pasos. Este
5
paradigma está más basado en el modo de realizar los algoritmos, por lo que se puede usar con
cualquier lenguaje imperativo.

La Programación Declarativa está basada 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.

2.3 Intérpretes

La computadora es una potente herramienta pero por sí sola no es capaz de efectuar ninguna tarea.
Es tan sólo una máquina compuesta por elementos físicos, que necesita recibir instrucciones por
parte de los humanos, para realizar alguna tarea; éstas órdenes o instrucciones se le deben
especificar de forma que la máquina las entienda; es decir, por medio de un lenguaje de
programación.

Se sabe que las computadoras no entienden otro lenguaje que no sea el lenguaje máquina por lo
que se hace n ecesario conocer el lenguaje de unos y ceros de la propia computadora. Este
lenguaje es demasiado complicado para los seres humanos aunque es directamente ejecutable por
la propia máquina.

En Ciencias de la Computación, intérprete o interpretador es un programa informático capaz de


analizar y ejecutar otros programas. Los intérpretes se diferencian de los compiladores o de los
ensambladores en que mientras estos traducen un programa desde su descripción en un lenguaje de
programación al código de máquina del sistema, los intérpretes sólo realizan la traducción a medida
que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado
de dicha traducción.

Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas
sumamente diferentes (ejemplo. una PC y una PlayStation 4). Usando un compilador, un solo archivo
fuente puede producir resultados iguales sólo si es compilado a distintos ejecutables específicos a
cada sistema.

Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de
traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de
programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar
partes enteras del programa o añadir módulos completamente nuevos). Permiten ofrecer al programa
interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio
intérprete (lo que se conoce comúnmente como Máquina Virtual).

Para mejorar el desempeño, algunas implementaciones de programación de lenguajes de


programación pueden interpretar o compilar el código fuente original en una más compacta forma
intermedia y después traducir eso al código de máquina. Algunos aceptan los archivos fuente
guardados en esta representación intermedia.

En la actualidad, uno de los entornos más comunes de uso de los intérpretes es en los navegadores
web, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

2.4 Compilador

6
Un compilador es un programa informático que traduce un programa escrito en un lenguaje de
programación a otro lenguaje de programación. Usualmente el segundo lenguaje es lenguaje de
máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este
proceso de traducción se conoce como compilación.

La construcción de un compilador involucra la división del proceso en una serie de fases que variará
con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa
fuente y la síntesis del programa objeto.

 Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases
correspondientes al Análisis léxico (que consiste en la descomposición del programa fuente en
componentes léxicos), Análisis sintáctico (agrupación de los componentes léxicos en frases
gramaticales ) y Análisis semántico (comprobación de la validez semántica de las sentencias
aceptadas en la fase de Análisis Sintáctico).

 Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele


estar formado por una o varias combinaciones de fases de Generación de Código
(normalmente se trata de código intermedio o de código objeto) y de Optimización de Código
(en las que se busca obtener un código lo más eficiente posible).

Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en
Front-end y Back-end:

 Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de
derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de
la plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases
comprendidas entre el Análisis Léxico y la Generación de Código Intermedio.

 Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir de
los resultados de la fase de análisis, realizada por el Front End.

Esta división permite que el mismo Back End se utilice para generar el código máquina de varios
lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código
fuente de un lenguaje de programación concreto sirva para generar código máquina en varias
plataformas distintas. Suele incluir la generación y optimización del código dependiente de la
máquina.

En suma, los Compiladores analizan la sintaxis y semántica de un programa fuente y sí es


correcta traducen completamente el conjunto de instrucciones a lenguaje máquina antes de que
cualquier instrucción sea ejecutada; esto garantiza que el programa esté libre de errores de sintáxis
y semántica. Además son más rápidos en la ejecución que los programas interpretados. A
continuación un diagrama que muestra las operaciones de un buen programa de compilación:

7
Tipos de Archivos Generados en el Proceso de Programar:

Programa: Conjunto de órdenes o instrucciones, que se le


dan a una computadora para que realice una tarea. Estas
instrucciones deben ser escritas en un lenguaje de
programación; en este sentido, tiene validez definir un
programa como el resultado de “codificar” un
algoritmo.

El p r o g r a m a escrito en u n l e n g u a j e de
programación se conoce como programa fuente y debe
ser traducido a lenguaje de máquina dando como
resultado un programa objeto.

Programa Fuente: Conjunto de instrucciones escritas en


un lenguaje de programación de alto nivel.

Programa Objeto: Conjunto de instrucciones que se


obtienen como resultado de la traducción de un programa
fuente, pero aún no directamente ejecutables por la
máquina.

Se debe hacer la observación, que el programa objeto es la traducción en lenguaje de máquina (0 y


1) del programa fuente (escrito en un lenguaje de programación) que no se puede ejecutar sin
agregarle las partes extra (instrucciones de las funciones importadas desde una librería) que el
programa necesita y que no forman parte de él, el resultado es un PROGRAMA EJECUTABLE.

Programa ejecutable: Conjunto de instrucciones directamente ejecutables por la máquina. Estas


instrucciones están escritas en lenguaje binario o lenguaje de máquina y, el archivo que las
contiene puede tener las extensiones EXE o COM para Windows o “bin” para Unix/Linux.

Esquemáticamente:

ENTRADA PROCESO SALIDA


#include <stdio.h> 10110010101000111
#include <conio.h> Traductor de 00011110101010101
#define n 5 10011001100110010
main () Lenguaje 00011100011100011
{ 11001110110001100
int a, b ,c; 01010101010101010
…. ...
}

Programa Fuente en C Compilador Programa Objeto


Lenguaje de Alto Nivel Lenguaje de Bajo Nivel
23575247

También podría gustarte