Fundamentos de Programación
1.1 Clasificación del Software
Hardware: se refiere a los componentes
físicos (tangibles) que conforman un sistema
computacional.
Software: es el conjunto de los programas de
cómputo, procedimientos, reglas,
documentación y datos asociados que
forman parte de las operaciones de un
sistema de computación (componentes
intangibles).
1.1.1 Software de Sistemas
Su objetivo es desvincular adecuadamente al usuario y al
programador de los detalles de la computadora en
particular que se use, aislándolo especialmente del
procesamiento referido a las características internas de:
memoria,
discos,
puertos
y
dispositivos
de
comunicaciones, impresoras, pantallas, teclados, etc. El
software de sistema le procura al usuario y
programador adecuadas interfaces de alto nivel,
herramientas y utilidades de apoyo que permiten su
mantenimiento.
Sistemas operativos
Controladores de dispositivos
Herramientas de diagnóstico
Herramientas de Corrección y Optimización
Servidores
1.1.2 Software de programación
Es el conjunto de herramientas que
permiten
al
programador
desarrollar
programas informáticos, usando diferentes
alternativas y lenguajes de programación, de
una manera práctica.
Editores de texto
Compiladores
Intérpretes
Enlazadores
Depuradores
Entornos de Desarrollo Integrado (IDE)
Interfaz Gráfica de Usuario (GUI)
1.1.3 Software de aplicación
Es aquel que permite a los usuarios llevar a cabo una o varias
tareas específicas, en cualquier campo de actividad susceptible
de ser automatizado o asistido, con especial énfasis en los
negocios.
◦
Aplicaciones para Control de sistemas y automatización industrial
◦
Aplicaciones ofimáticas
◦
Software educativo
◦
Software empresarial
◦
Bases de datos (puede considerarse como de sistemas)
◦
Telecomunicaciones (p.ej. internet y toda su estructura lógica)
◦
Videojuegos
◦
Software médico
◦
Software de Cálculo Numérico y simbólico.
◦
Software de Diseño Asistido (CAD)
1.2 Algoritmo
Es una secuencia finita de pasos o instrucciones
ordenadas crono-lógicamente que describen un
método para resolver un problema específico.
Es un conjunto preescrito de instrucciones o
reglas bien definidas, ordenadas y finitas que
permite realizar una actividad mediante pasos
sucesivos que no generen dudas a quien lo
ejecute.
Dados un estado inicial y una entrada, siguiendo
los pasos sucesivos se llega a un estado final y se
obtiene una solución.
1.2.1 Ejemplo Algoritmo:
1.3 Lenguaje de Programación
Es un lenguaje artificial que puede ser usado para
controlar el comportamiento de una máquina,
especialmente una computadora. Estos se componen
de un conjunto de reglas sintácticas y semánticas
que permiten expresar instrucciones que luego
serán interpretadas y ejecutadas por el computador.
Es un conjunto limitado de palabras y símbolos que
representan procedimientos, cálculos, decisiones y
otras operaciones, como control de procesos, que
puede ejecutar una computadora.
Los lenguajes de programación pueden clasificarse
según el paradigma que usan en: procedimentales,
orientados a objetos, funcionales, lógicos, híbridos,
etc.
1.3.1 Gramática de un
lenguaje de Programación
Sintaxis de un lenguaje de programación:
estructura o forma de los programas.
Semántica de un lenguaje de programación:
relaciones entre un programa y un modelo de
computación.
Pragmática de un lenguaje de programación:
grado de éxito con el que un programa cumple
sus objetivos tanto en su fidelidad con el
modelo de computación subyacente como su
utilidad para los programadores.
1.4 Programa
Es un conjunto de instrucciones que una vez
ejecutadas realizarán una o varias tareas en
una computadora.
Es la codificación de un algoritmo en un
lenguaje de programación.
Es un conjunto de instrucciones u ordenes
basadas en un lenguaje de programación que
una computadora interpreta y ejecuta para
resolver un problema o una función
especifica.
1.5 Programación
Se refiere a la codificación e implementación de un
algoritmo en un lenguaje de programación específico
para dar solución a un problema.
Se refiere a la serie de actividades y pasos que se
abordan para crear el código fuente de un programa
informático. De acuerdo con estos pasos, el código se
escribe, se prueba y se perfecciona.
Es el proceso que se realiza para desarrollar software.
Es aquella actividad por la cual se crean programas para
computadoras, tales programas pueden ser códigos
fuentes interpretados (como por ejemplo scripts en
BASH) o códigos fuentes que serán compilados (como
por ejemplo programas en C++) hacia lenguajes binarios
y ejecutados desde el kernel del sistema operativo.
1.6 Paradigmas de programación
Un paradigma de programación es un modelo
básico de diseño y desarrollo de programas,
que permite producir programas con unas
directrices específicas, tales como: estructura
modular, fuerte cohesión, alta rentabilidad, etc.
Un paradigma de programación es una
colección de modelos conceptuales que juntos
modelan el proceso de diseño y determinan, al
final, la estructura de un programa.
1.6.1Modelo de computación imperativo
También denominado procedural
Conjunto de valores que definen un estado y la
operación de asignación de la modificación de
estado.
Un estado es un conjunto de pares
nombre-valor de las constantes y variables.
Un programa es una secuencia de asignaciones.
Una computación es una secuencia de estados.
Computación: aplicación de una secuencia de
operaciones a un valor para obtener otro
valor.
1.6.2 Modelo de computación funcional
Conjunto de valores, funciones y las operaciones de
aplicación de función y composición de función.
Las funciones pueden tomar como argumentos otras
funciones y devolverlas como resultados.
Un programa es una colección de definiciones de
funciones.
Una computación es una evaluación (aplicación) de una
expresión (función con sus argumentos).
1.6.3 Modelo de computación lógico
Conjunto de valores, definiciones de relaciones e
inferencias lógicas.
Un programa es una definición de relaciones.
Una computación es una prueba (secuencia de inferencias
lógicas)
1.6.4 Computabilidad
Los tres modelos son equivalentes cualquier
problema que tenga una solución en un modelo
es resoluble en cada uno de los otros dos.
Se
denominan
modelos
universales
de
computación.
Otros modelos también son equivalentes.
Están
mezclados
en
los
lenguajes
de
programación:
◦
Java es imperativo, pero incorpora elementos
funcionales y lógicos.
◦
CommonLisp es funcional, pero permite realizar
◦
programación imperativa y lógica.
◦
Prolog es lógico, pero admite determinadas
secuencias imperativas.
1.6.5 Programación imperativa
Modela la arquitectura de la máquina de von
Neumann.
La computación consiste en la ejecución paso a
paso de algoritmos (secuencias condicionales o
repetitivas de instrucciones) que modifican los
contenidos de variables (espacios de memoria).
Tipos:
◦
Lenguajes
procedurales
(Pascal,
C):
utilizan
subprogramas como unidades de modularización
para definir pasos de Computación.
◦
Lenguajes orientados a objetos (Smalltalk, C++, Java):
encapsulan en objetos tanto los datos como las
operaciones sobre los mismos Paradigmas.
Ejemplo de programación imperativa
Function member (e: real; a: lista-reales): lista-reales;
begin
if (a = nil)
then member := nil
else while ((aˆ .siguiente <> nil) and
(e <> aˆ .elemento)) do
a := aˆ .siguiente;
if e = aˆ .elemento
then member := a
else member := nil
end;
1.6.6 Programación declarativa
Utiliza bloques de construcción como las
funciones, la recursión o la equiparación de
patrones, para especificar más la solución que su
cálculo de bajo nivel.
Tipos:
◦
Lenguajes funcionales (Common Lisp, Scheme,
Haskell): utilizan
funciones
libres
de
efectos
secundarios como bloques primitivos de construcción
de programas. Estas funciones pueden aplicarse,
construirse y pasarse como argumentos a otras
funciones.
◦
Lenguajes lógicos (Prolog): calculan resultados
utilizando reglas e inferencias lógicas.
1.6.7 Programación Orientada a Objetos
Define la computación como la interacción entre objetos
Autónomos.
Mediante la utilización de objetos, la programación se
convierte en simulación.
Los objetos son instancias de clases que se organizan en
jerarquías de herencia.
Los objetos se comportan independientemente.
Utilizan la selección de las operaciones en tiempo de
ejecución cuando interpretan los mensajes provenientes
de otros objetos.
Ejemplos:
-Smalltalk, Eiffel, y Java son lenguajes orientados a objetos
-Muchos lenguajes actuales, como C++, Ada-95, o
Common Lisp también dan soporte a este tipo de
programación.
Ejemplo de programación
orientada a objetos
Clase: lista
Atributos: elemento, siguiente
Métodos: primero, siguiente, member, ...
Ejecución de member: mandar un mensaje
member a una instancia de la clase lista con
el argumento elemento a buscar.
1.6.8 Programación basada en módulos
Reconoce agrupaciones de variables, procedimientos
y tipos como unidades estáticas de modularidad de
programa.
El interface a un módulo (o paquete) especifica y
exporta una serie de servicios generales.
Los detalles de implementación se ocultan en una
unidad de programa compilada separadamente.
Ejemplos:
Modula-2, Ada y C++, JAVA soportan este estilo de
programación que puede ser combinada con
1.6.9 Otros paradigmas de programación
Programación visual
Programación basada en restricciones
Programación basada en tipos abstractos de datos
Programación genérica
Programación concurrente
Programación basada en componentes distribuidos
Programación basada en agentes
Programación literaria
Programación basada en patrones de diseño
Programación basada en guiones
Programación automática: aprendizaje automático
Programación orientada a eventos
1.7 Editores de Texto
Un editor de texto es un programa que permite crear y
modificar archivos digitales compuestos únicamente por
texto sin formato, conocidos comúnmente como archivos
de texto o texto plano. El programa lee el archivo e
interpreta los bytes leídos según el código de caracteres
que usa el editor. Hoy en día es comúnmente de 7- ó 8-bits
en ASCII o UTF-8, rara vez EBCDIC.
El texto plano es representado en el editor mostrando
todos los caracteres presentes en el archivo. Los únicos
caracteres de formateo son los caracteres de control del
respectivo código de caracteres. En la práctica, estos son:
salto de línea, tabulación horizontal y retorno de carro.
1.7.1Tipos de editores de texto
Algunos son de uso general, mientras que otros están
diseñados para escribir o programar en un lenguaje.
Algunas funciones especiales son:
◦
Editores diseñados para un lenguaje de programación
determinado, con coloreado de sintaxis, macros, completar
palabras, etc.
◦
Editores con regiones plegables. A veces no todo el texto es
relevante para el usuario. Con este tipo de editores ciertas
regiones con texto irrelevante pueden ser plegadas,
escondidas, mostrando al usuario solo lo importante del
texto.
◦
IDE es un editor más otras herramientas de trabajo,
compiladores, extractores de diferencias entre dos textos,
repositorios, etc, incluidos en un solo programa.
1.7.2 Algunos Editores
Emacs, otro editor muy común en Unix
Vi, editor muy común en Unix
Kate, un moderno editor para Unix
Notepad++, editor de código fuente para
Microsoft Windows
jEdit, editor popular multiplataforma
TextPad, editor popular multiplataforma
Jcreator, IDE para JAVA
Eclipse, IDE para JAVA
DEV C, IDE para lenguaje C
Visual Studio, IDE para .NET
NET BEANS, IDE para java
1.8 Clasificación de Lenguajes de programación
Por su nivel:
Alto: instrucciones semejantes a lenguaje natural
Medio
Bajo: instrucciones semejantes a lenguaje máquina
Por su traducción:
Compiladores: lee un programa escrito en un
lenguaje fuente y lo traduce a un programa
equivalente en otro lenguaje, el lenguaje objeto.
Intérpretes: un intérprete es un programa que,
como su nombre lo indica, interpreta símbolos en
un programa y los traduce a lenguaje máquina
conforme deban ser ejecutados.
1.8.1 Compiladores
Un compilador es un programa informático que
traduce un programa escrito en un lenguaje de
programación a otro lenguaje de programación,
generando un programa equivalente que la máquina
será capaz de interpretar. Usualmente el segundo
lenguaje es lenguaje de máquina, pero también puede
ser simplemente texto. Este proceso de traducción
se conoce como compilación.
Un compilador es un programa que permite traducir
el código fuente de un programa en lenguaje de alto
nivel, a otro lenguaje de nivel inferior (típicamente
lenguaje de máquina). De esta manera un
programador puede diseñar un programa en un
lenguaje mucho más cercano a como piensa un ser
humano, para luego compilarlo a un programa más
manejable por una computadora.
1.8.3 Interpretes
Intérprete es un programa informático capaz de analizar y ejecutar
simultáneamente un programa escrito en un lenguaje fuente.
Los intérpretes se diferencian de los compiladores 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 primeros (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.
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), y 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).
1.8.5 Esquema de compilador con
interprete de código intermedio
1.9 Ejecutables
un ejecutable o archivo ejecutable, es un archivo binario cuyo
contenido se interpreta por el ordenador como un programa.
contiene instrucciones en código máquina de un procesador en
concreto, pero también puede contener bytecode que requiera
un intérprete para ejecutarlo.
suele contener llamadas a funciones específicas de un sistema
operativo (llamadas al sistema).
ejecutables portables: se pueden ejecutar en varias plataformas.
Ejecutables no portables: destinado a una plataforma concreta.
contiene mucha información que no es parte del programa en
sí: recursos como textos e imágenes, requisitos del entorno de
ejecución, información simbólica y de depuración, u otra
información que ayude al sistema operativo a ejecutar el
programa.
1.10 Consola de línea de comandos
También conocida como Interfaz de Línea de
Comandos (CLI), por su acrónimo en inglés de
Command Line Interface (CLI), es un método que
permite a las personas dar instrucciones a algún
programa informático por medio de una línea de
texto simple.
Las
CLI
pueden
emplearse
interactivamente,
escribiendo instrucciones en alguna especie de
entrada de texto, o pueden utilizarse de una forma
mucho más automatizada (batch), leyendo comandos
desde un archivo de scripts.
La contraparte de CLI es la interfaz gráfica de
1.10.1.a Comandos de Windows
AT - Planifica comandos y programas para ejecutarse en un equipo. ATTRIB - Muestra o cambia los atributos del archivo.
BREAK - Establece o elimina la comprobación extendida de Ctrl+C.
CACLS - Muestra o modifica las listas de control de acceso (ACLs) de archivos. * Atención: En la ayuda de Windows hay un error y este comando lo llaman CALCS que no existe.
CALL - Llama a un programa por lotes desde otro.
CD - Muestra el nombre del directorio actual o cambia a otro directorio. CHCP - Muestra o establece el número de página de códigos activa.
CHDIR - Muestra el nombre del directorio actual o cambia a otro directorio. CHKDSK - Comprueba un disco y muestra un informe de su estado.
CHKNTFS - Muestra o modifica la comprobación de disco al iniciar. CLS - Borra la pantalla.
CMD - Inicia una nueva instancia del intérprete de comandos de Windows.
COLOR - Establece los colores de primer plano y fondo predeterminados de la consola. COMP - Compara el contenido de dos archivos o un conjunto de archivos.
COMPACT - Muestra o cambia el estado de compresión de archivos en particiones NTFS.
CONVERT - Convierte volúmenes FAT a volúmenes NTFS. No puede convertir la unidad actual. COPY - Copia uno o más archivos a otro lugar.
DATE - Muestra o establece la fecha. DEL - Elimina uno o más archivos.
DIR - Muestra una lista de archivos y subdirectorios en un directorio. DISKCOMP - Compara el contenido de dos disquetes.
DISKCOPY - Copia el contenido de un disquete a otro.
1.10.1.b Comandos de Windows
ECHO - Muestra mensajes, o activa y desactiva el echo.
ENDLOCAL - Termina la búsqueda de variables de entorno del archivo por lotes. ERASE - Elimina uno o más archivos.
EXIT - Sale del programa CMD.EXE (interfaz de comandos).
FC - Compara dos archivos o conjunto de archivos y muestra las diferencia entre ellos. FIND - Busca una cadena de texto en uno o más archivos.
FINDSTR - Busca cadenas de texto en archivos.
FOR - Ejecuta un comando para cada archivo en un conjunto de archivos. FORMAT - Da formato a un disco para usarse con Windows.
FTYPE - Muestra o modifica los tipos de archivo utilizados en una asociació de archivos.
GOTO - Direcciona el intérprete de comandos de Windows a una línea de un programa por lotes. GRAFTABL - Permite a Windows mostrar un conjunto de caracteres extendido en modo gráfico. HELP - Proporciona información de ayuda para los comandos de Windows.
IF - Ejecuta procesos condicionales en programas por lotes.
LABEL - Crea, cambia o elimina la etiqueta del volumen de un disco. MD - Crea un directorio.
MKDIR - Crea un directorio.
MODE - Configura un dispositivo de sistema.
MORE - Muestra la información pantalla por pantalla.
MOVE - Mueve uno o más archivos de un directorio a otro en la misma unidad. PATH - Muestra o establece una ruta de búsqueda para archivos ejecutables. PAUSE - Suspende el proceso de un archivo por lotes y muestra un mensaje. POPD - Restaura el valor anterior del directorio actual guardado por PUSHD. PRINT - Imprime un archivo de texto.
1.10.1.c Comandos de Windows
PROMPT - Cambia el símbolo de comandos de Windows. PUSHD - Guarda el directorio actual y después lo cambia. RD - Elimina un directorio.
RECOVER - Recupera la información legible de un disco dañado o defectuoso. REM - Graba comentarios en archivos por lotes o CONFIG.SYS.
REN - Cambia el nombre de uno o más archivos. RENAME - Cambia el nombre de uno o más archivos. REPLACE - Reemplaza archivos.
RMDIR - Elimina un directorio.
SET - Muestra, establece o elimina variables de entorno de Windows.
SETLOCAL - Inicia la localización de cambios del entorno en un archivo por lotes. SHIFT - Cambia posición de modificadores reemplazables en archivos por lotes. SORT - Ordena las entradas.
START - Inicia otra ventana para ejecutar un programa o comando. SUBST - Asocia una ruta de acceso con una letra de unidad.
TIME - Muestra o establece la hora del sistema.
TITLE - Establece el título de la ventana de una sesión de CMD.EXE.
TREE - Muestra gráficamente la estructura de directorios de una unidad ruta de acceso. TYPE - Muestra el contenido de un archivo de texto.
VER - Muestra la versión de Windows.
VERIFY - Comunica a Windows si debe comprobar que los archivos se escribe de forma correcta en un disco.
VOL - Muestra la etiqueta del volumen y el número de serie del disco. XCOPY - Copia archivos y árboles de directorios.