1. Paso por referencia
1.1. Parámetro formal y real comparten misma variable
1.2. Su comunicación es eficiente
1.3. Acceso mas lento
1.4. Es fuente de error
2. Nombres, Ligado Ámbito
2.1. Nombres e Identificador
2.1.1. Identificador
2.1.1.1. Que designa en el lenguaje un elemento
2.1.2. Aspectos de diseño
2.1.2.1. largo
2.1.2.2. Tipos de caracteres aceptado
2.1.2.3. Palabras reservadas
2.1.2.4. Sensibilidad mayúsculas y minúsculas
2.2. Variables
2.2.1. Definición
2.2.1.1. Abstracción de un objeto de memoria con:
2.2.1.1.1. Nombre
2.2.1.1.2. Dirección
2.2.1.1.3. Tipo
2.2.1.1.4. Valor
2.2.1.1.5. Tiempo de vida
2.2.1.1.6. Ámbito
2.2.2. Dirección de una variable
2.2.2.1. Asociado con diferentes nombres
2.2.2.2. Se asocian en distintas partes
2.2.3. Ligado
2.2.3.1. Proceso de asociación de un atributo a una entidad
2.2.3.1.1. Ligado estático
2.2.3.1.2. Ligado Dinámico
2.2.3.2. Ligado a memoria y tiempo de vida
2.2.3.2.1. Estáticas
2.2.3.2.2. Dinámicas de Stack
2.2.3.2.3. Dinámicas de heap
2.2.4. Tipo de datos
2.2.4.1. Definición
2.2.4.1.1. Operador binario con una variable y una expresión como operandos
2.2.4.2. Verificación de tipo
2.2.4.2.1. se verifica estaticamente si su ligado es estático
2.2.4.2.2. Se verifica dinámicamente en tiempo de ejecución
2.2.4.3. Tipificado fuerte
2.2.4.3.1. si se permite detectar siempre los errores de tipo
2.2.4.4. Compatibilidad de tipos
2.2.4.4.1. Compatibilidad de nombres
2.2.4.4.2. Compatibilidad de estructura
2.2.4.5. Ámbito
2.2.4.5.1. Rango en el que el nombre es valido
3. Tipos de datos
3.1. Evolución de tipos
3.1.1. Números enteros y reales
3.1.2. Arreglos y registros
3.1.3. Cadenas de caracteres
3.1.4. Definidos por el usuario
3.1.5. Tipos abstractos
3.2. Tipo Ordinal
3.2.1. Asociado a un numero natural,entero,carácter
3.3. Tipo enumerado
3.3.1. Posibles valores a través de constantes
3.3.2. Mejoran facilidad de lectura y fiabilidad
3.4. Tipo Subrango
3.4.1. Subsecuente del tipo ordinal
3.4.2. Mejora lectura y fiabilidad
3.5. Tipos Primitivos
3.5.1. Numérico
3.5.1.1. Entero
3.5.1.2. Punto Decimal
3.5.1.3. Flotante
3.5.2. Booleano
3.5.3. Carácter
3.6. Tipo de dato estructurado
3.6.1. Tipo arreglo
3.6.1.1. Conjunto ordenado de elementos
3.6.1.2. Algunos lenguajes poseen chequeo de rango
3.6.1.3. La memoria es un arreglo unidimensional de celdas
3.6.1.3.1. Se almacenan como filas de columna o viceversa
3.6.1.4. Existen arreglos que se acceden por una clave
3.6.2. Tipo Registro
3.6.2.1. Permite composición heterogénea de elementos
3.6.2.2. Cada elementos se identifica con nombre
3.6.3. Almacenan diferentes tipos de datos
3.6.4. Cadena de caracteres
3.6.4.1. Para comunicación maquina usuario
3.6.4.2. para manipular textos
3.6.4.3. posee operaciones de:
3.6.4.3.1. Asignación
3.6.4.3.2. Comparación
3.6.4.3.3. Concatenación
3.6.4.3.4. Largo
3.6.4.3.5. Transformación
3.6.4.4. algunos lenguajes permiten uso de expresiones regulares
3.6.5. Tipo union
3.6.5.1. Almacenan memoria igual al mayor definido
3.6.5.2. Comparten memoria
3.6.5.3. Su uso es poco seguro
3.7. Tipo de dato puntero
3.7.1. Definición
3.7.1.1. Valor correspondido a una dirección de memoria
3.7.1.2. No corresponde a un tipo estructurado
3.7.2. Asignación
3.7.2.1. asigna como la valor la dirección de memoria
3.7.2.1.1. Existe en forma de bloque o función
3.7.3. Desreferenciación
3.7.3.1. Entrega el valor del objeto apuntado
3.7.4. Problemas
3.7.4.1. Dejar colgado
3.7.4.2. Perdida de variables dinámicas de heap
3.7.5. Método de reclamo de basura
3.7.5.1. Contador de referencia
3.7.5.1.1. mantiene contadores de referencia
3.7.5.1.2. se libera la celda cuando contador es cero
3.7.5.2. Recolección de basura
3.7.5.2.1. acumula basura hasta agotar memoria
4. Subprogramas
4.1. Características
4.1.1. Crea abstracción en el proceso
4.1.2. Permite reutilizar código
4.2. Mecanismo de invocación
4.2.1. Invoca y suspende ejecución de código en siguientes lineas
4.2.2. Pasa parámetros al subprograma
4.2.3. Activa el método y retorna resultado
4.2.4. Reanuda ejecución del código
4.3. Firma y protocolo
4.3.1. Firma
4.3.1.1. Cabecera del método
4.4. Parámetros
4.4.1. Definición
4.4.1.1. Variables mudas que se ligan a parámetros reales
4.4.1.2. Protocolo
4.4.1.2.1. Especifica como se realiza la comunicación de parámetros
4.4.1.3. la comunicación es explicita o implícita
4.4.2. Tipo de transferencia
4.4.2.1. Paso por valor
4.4.2.1.1. se copia el valor al parámetro del método
4.4.2.1.2. protege de modificaciones del parámetro actual
4.4.2.2. Paso por resultado
4.4.2.2.1. Implementado con copia de valor
4.4.2.3. Parámetro actual debe ser variable
4.4.2.4. Paso por valor - resultado
4.4.2.4.1. Copia de parámetros en la entrega y retorno
4.4.2.4.2. Posee dificultades
4.4.3. Sobrecarga de subprogramas
4.4.3.1. Existen diferentes subprogramas en mismo ámbito
4.4.3.2. Cada versión con firma diferente
4.4.3.3. Las versiones difieren en la codificación
5. La ejecución es secuencial
6. Motivación para estudiar lenguajes de programación
6.1. Mejor capacidad expresando ideas
6.2. Sobresaliente base eligiendo lenguajes apropiados
6.3. Superior habilidad aprendiendo nuevos lenguajes
6.4. un mejor uso del lenguaje
7. Dominios
7.1. Aplicaciones de negocio
7.2. Aplicaciones científicas
7.3. Inteligencia artificial
7.4. Lenguajes de propósito general
8. Característica que debe poseer un lenguaje
8.1. Sencillez de escritura
8.2. sencillez de lectura
8.3. Fiable
8.4. Posee un Estándar
8.4.1. De Jure
8.4.2. De Facto
9. Paradigmas de Programación
9.1. todo lo anterior pasa por una tabla de símbolos
9.2. Paradigma Imperativo
9.2.1. Orientado a instrucciones
9.2.2. Capaz de ser modular y estructurado
9.2.3. Difícil de entender y mantener
9.2.4. Soportado por Fortran, Basic y Pascal
9.3. Paradigma Orientado a objetos
9.3.1. Imita al comportamiento de un objeto en la vida real
9.3.2. Fácil de hacer extensiones y modificaciones
9.3.3. Soportado por Java, Python y C++
9.4. Paradigma Declarativo
9.4.1. Paradigma Funcional
9.4.1.1. Basado en el calculo lambda
9.4.1.2. Posee una elegancia, claridad y sencillez
9.4.1.3. Soportado por Scala, Scheme y Haskell
9.4.2. Paradigma Lógico
9.4.2.1. Basado en la lógica de primer orden
9.4.2.2. Posee simplicidad
9.4.2.3. Soportado por Prolog y Mercury
9.5. Paradigma Orientado a Eventos
9.5.1. Determinados por sucesos que ocurren en el sistema
9.5.2. Posee una mayor reusabilidad
9.5.3. Soportado por JavaScript y Visual Basic
9.6. Paradigma Orientado a Aspectos
9.6.1. Permita una adecuada modularización
9.6.2. El código es menos arañado, natural y reducido
9.6.3. Soportado por el AspectJ
10. Los lenguajes pueden ser
10.1. Compilados
10.2. Interpretados
10.3. Híbridos
11. Sintaxis y Semántica
11.1. Definiciones
11.1.1. Sintaxis: forma de expresiones y sentencias
11.1.1.1. Métodos formales de descripción
11.1.1.1.1. Backus Naur Form(BNF): metalenguaje utilizado para expresar gramática
11.1.1.1.2. Ambigüedad
11.1.1.1.3. Extended BNF (EBNF): también útil para expresar gramática
11.1.2. Ejemplo: while(<exp>) do <sentencias>
11.1.3. Semántica: significado de las sentencias
11.2. Elementos sintácticos
11.2.1. Conjunto de caracteres
11.2.2. Identificadores
11.2.3. símbolos de operaciones
11.2.4. Palabras clave
11.2.5. Comentarios, etc
11.3. Proceso de compilación
11.3.1. Cuando el código es leído por un compilador, y entra en
11.3.1.1. Análisis léxico
11.3.1.1.1. Verifica inicio y fin de una expresión
11.3.1.2. Análisis sintáctico
11.3.1.2.1. llama repetidamente al analizador léxico
11.3.1.3. Análisis semántico
11.3.1.3.1. construye las instrucciones de lenguaje
11.3.1.4. Generación de código
11.3.1.4.1. Entendible para el computador
12. Expresiones y Asignaciones
12.1. Definición
12.1.1. El lenguaje imperativo es dominante de expresiones y asignaciones
12.1.2. el valor dependerá del orden de operandos
12.1.3. Diferentes resultados, con ambigüedades distintas
12.2. Expresiones Aritméticas
12.2.1. Orden de evaluación definida por reglas de precedencia y asociatividad
12.2.2. Uso de paréntesis determinan orden
12.3. Expresiones condicionales
12.3.1. Utilizado en la toma de decisiones
12.3.2. Orden de operandos producirá resultados inesperados
12.4. Expresiones relacionales
12.4.1. utilizado para obtener relaciones entre sentencias
12.5. Operadores booleanos
12.5.1. Incluye AND, ORT y NOT
12.5.2. Precedencia definida de mayor a menor
12.6. Sentencias de asignación
12.6.1. cambia dinamicamente el ligado de una variable
12.6.2. Algunos lenguajes utilizan el "=" y otros ":="
12.6.3. Permite codificar en forma mas compacta
12.6.4. Es fácil producir una equivocación
13. Estructuras de Control
13.1. Definición
13.1.1. Al principio solo se tenia un goto
13.2. Tipos
13.2.1. Selección
13.2.1.1. Alternativas de ejecución
13.2.2. Repetición
13.2.2.1. Repite varias sentencias
13.3. Tipos de sentencias
13.3.1. Sentencias compuestas
13.3.1.1. Agrupa un conjunto de sentencias
13.3.2. Sentencias de selección
13.3.2.1. ejemplos el if-else o un if solo
13.3.3. Sentencias iterativas
13.3.3.1. Incluye los diferentes tipos de bucles
13.3.3.1.1. Bucles controlados por contador
13.3.3.1.2. Bucles controlados por condición
13.3.3.1.3. Bucles controlados por estructura de datos
13.3.4. Salto incondicional
13.3.4.1. Uso de rótulos o etiquetas