Semana 1 - Logica Proposicional y Especificaciones

Semana 1 — Introducción

Intro a la Materia

En esta materia el obejetivo sera aprender a programar en lenguajes funcionales e imperativos. Especificar los problemas a resolver, pensar algoritmos para resolverlos y empezar a razonar acerca de estos, para luego escribir programas que los implementen.

Conceptos base

El recorrido de problema a programa

Mas sobre Especificaciones

Lenguajes naturales y formales

A la hora de describir tenemos estas dos opciones:

El contrato

A la hora de crear una especificacion, estamos creando un contrato, un acuerdo entre quien usa una función y quien la implementa:

Partes de una Especificacion

Parte Qué fija Ejemplo: raíz(x)
Encabezado Nombre de la funcion, parametros/argumentos que espera y tipo de salida que podemos esperar. Entrada: x; salida: un real.
Requiere (precondición) Condiciones sobre los parametros o argumentos. Que requiere la funcion para hacer su tarea. x ≥ 0.
Asegura (postcondición) Lo que debe valer al terminar, si se cumplió requiere. resultado² = x y resultado ≥ 0.
Los parámetros o argumentos son datos de entrada cuyo valor se conoce al ejecutar. Cada uno tiene su tipo de datos: un conjunto de valores provisto de operaciones permitidas sobre ellos. Ej.: fecha (comparar, obtener año) o dinero (sumar, restar).

Paradigmas: dos formas de programar

Paradigma Idea En la materia
Declarativo Describe el resultado, relaciones o transformaciones; no necesariamente los pasos de ejecución. Puede ser de Paradigma Logico (los programas estan construidos unicamente por expresiones logicas) o Funcional (basado en el modelo matematico de composicion funcional, donde el resultado de un calculo es la entrada del siguiente, sucesivamente hasta componer el valor deseado). Haskell. También existe el lógico (Prolog).
Imperativo Indica una secuencia de comandos que cambia el estado del programa. Pueden ser de Paradigma Estructurado (los programas se dividen en bloques de procedimientos y funciones que pueden o no comunciarse entre si, y estructuras de control dirigen el flujo de ejecucion) o Orientados a Objetos, donde se encapsulan estados y comportmientos en objetos, entidades que se comunican entre si por mensajes. Python. Incluye estilos estructurado y orientado a objetos. Es tambien multiparadigma, no es estrictamente imperativo.