Nivel 1. Problemas, soluciones y programas Presentación creada por M.J. Gaitán Fundamentos de programación Villalobos J.A., Casallas R. Prentice Hall, 2006
Problemas y soluciones Etapa 1 Etapa 2 Etapa N Proceso Programador Problema Cliente Usuario Programa Solución
Especificación de un problema Requerimientos funcionales Mundo del problema Problema Análisis Cliente Programador Requerimientos no funcionales
Análisis de un problema Una compañía quiere hacer un programa para que los consumidores puedan consultar la información nutricional de sus productos. Cliente Compania de alimentos Usuario Consumidor Requerimientos funcionales R1.Dado el codigo de barras de un producto, dar la informacion de: calorias, carbohidratos, proteinas, lipidos, sales, tamano de porcion, Mundo del problema Lista de productos, informacion nutricional de cada producto Requerimientos no funcionales Distribuido en los supermercados, lector de barras, presentacion agradable, anuncio de la comapania
El proceso y las herramientas Problema Entender y especificar el problema: Requerimientos funcionales Mundo del problema Requerimientos no funcionales Análisis del problema Diseño de la solución Construcción de la solución Proceso Programador Detallar características de la solución antes de construirla. Uso de algún lenguaje Herramientas y lenguajes Implementar el programa y probar su funcionamiento Solución
Elementos que forman parte de la solución de un problema Diseño del programa Código fuente Código ejecutable Archivos de construcción compilador programa Datos de prueba Pruebas del programa
Construcción de un programa Programador usa Ambiente de desarrollo Código ejecutable crea tiene Se instala donde Compilador Editor crea traducido por entiende Usuario Código fuente Lenguaje de programación escrito en
Caso de estudio 1 Programa que administra la información de un paciente adulto Nombre, apellido, sexo, fecha de nacimiento, fecha de inicio del tratamiento, peso, estatura Cambiar: peso Calcular: edad actual, índice de masa corporal, peso ideal
Comprensión y especificación del problema Análisis del problema ¿Cómo se especifica un requerimiento funcional? ¿Cómo saber qué es un requerimiento funcional? ¿Cómo se describe el mundo del problema?
Requerimientos funcionales Nombre R1. Introducir datos del paciente Resumen Permite al usuario introducir la información del paciente: datos personales y datos del estado actual Entradas Nombre del paciente Apellido del paciente Sexo del paciente Fecha de nacimiento Fecha de inicio del tratamiento Estatura Peso Resultado Datos en memoria
Requerimientos funcionales Nombre R2. Actualizar el índice de masa corporal Resumen Permite actualizar el índice de masa corporal, de acuerdo con la información Entradas Peso Estatura Resultado El índice de masa corporal ha sido actualizado
Requerimientos funcionales Nombre R3. Actualizar edad actual Resumen Permite modificar la edad actual del paciente Entradas Fecha de nacimiento Fecha actual Resultado La edad del paciente ha sido actualizada
Requerimientos funcionales Nombre R4. Actualizar el peso ideal Resumen Permite modificar el peso ideal del paciente de acuerdo con su estatura, edad y sexo Entradas Estatura Edad Sexo Resultado El peso ideal del paciente ha sido actualizado
El modelo del mundo del problema Identificar entidades Modelar sus características Buscar sus relaciones Documentar El modelo del mundo del problema Clases atributos asociaciones nombre
El modelo del mundo del problema Identificación de entidades o clases Elementos concretos o abstractos Programas pequeños: buscar sustantivos en el enunciado del problema Entidad
El modelo del mundo del problema Modelado de características o atributos Clase: Atributo Valores posibles UML
El modelo del mundo del problema Modelado de características o atributos Clase: Atributo Valores posibles UML
El modelo del mundo del problema Relación entre entidades Fecha Paciente fechaNacimiento fechaIngreso
Requerimientos no funcionales Contexto de utilización del programa Restricciones definidas por el cliente Ejemplos: Múltiples usuarios Sistema de computación específico Capacidades de almacenamiento Tiempo de procesamiento
Elementos de un programa Datos Procedimientos Algoritmos Clases y objetos Tipos de datos Métodos Instrucciones Lenguaje de programación
Clases y objetos Clases Objeto Definen la estructura del programa Paciente nombre apellido sexo estatura peso algoritmos Fecha dia mes anio fechaNacimiento fechaIngreso Clases Definen la estructura del programa Entidades del mundo del problema Definido por atributos y métodos Objeto Instancia o ejemplar de una clase Valores propios para cada atributo {valores de atributos} estado del objeto fechaNacimiento fechaIngreso :Paciente nombre=“Luis” apellido=“Laos” sexo=Masculino estatura=168 peso=72 :Fecha dia=14 mes=5 anio=1972 dia=22 anio=2006 fechaNacimiento fechaIngreso :Paciente nombre=“Ana” apellido=“Ruiz” sexo=Femenino estatura=155 peso=50 :Fecha dia=24 mes=10 anio=1989 dia=15 mes=1 anio=2005
Tipos de datos Java Características Ejemplos Simples Compuestos Enteros int -32768 32767 48 -360 Reales double -2.9E39 1.7E38 49.5 -3.1416 Carácter char Un solo carácter alfanumérico o especial ‘a’ ’A’ ‘7’ ‘+’ 97 65 55 43 Lógicos boolean true false Compuestos Cadena String Secuencia de caracteres “Qué bien” “”
Paquetes Estructura jerárquica de las clases de un programa ClaseInterfaz1 ClaseInterfaz2 … ClaseMundo1 ClaseMundo2 … ClaseUtil1 ClaseUtil2 … ClasePrueba1 …
Java Bloque de instrucciones { } Comentarios Declaración de una clase De línea // De sección Declaración de una clase Archivo: Fecha.java public class Fecha { // Aquí va la declaración de la clase Fecha }
Java Declaración del paquete de la clase package uami.intProg.paciente /** * Esta clase representa a un paciente */ public class Fecha { // Aquí va la declaración de la clase Fecha }
Java Declaración de atributos de la clase package uami.intProg.paciente /* Esta clase representa una fecha */ public class Fecha { // Atributos------------------- private int dia; private int mes; private int anio; } Fecha int dia int mes int anio algoritmos
Java Declaración de atributos de la clase package uami.intProg.paciente /* Esta clase representa a un paciente */ public class Paciente { // Atributos private String nombre; private String apellido; private int sexo; //1=masculino,2=femenino private int estatura; private double peso; private Fecha fechaNacimiento; private Fecha fechaIngreso; } Paciente String nombre String apellido int sexo int estatura double peso algoritmos Fecha int dia int mes int anio fechaNacimiento fechaIngreso
Métodos Cada algoritmo de una clase es un método Elementos Solución de un problema puntual Servicio que la clase presta a las demás o a ella misma Elementos Nombre Lista de parámetros (con su tipo) Información que no tiene el objeto pero que se necesita para resolver el problema puntual Tipo de respuesta (si no hay salida, void ) Cuerpo del método Conjunto de instrucciones Signatura: encabezado (método sin cuerpo)
Métodos Nombre: Parámetros: Retorno: Descripción: public tipo nombre(tipo parametros) { //Cuerpo del método } Parámetros: Retorno: Descripción:
Métodos Fecha Paciente String nombre String apellido int dia int sexo int estatura double peso void cambiarPeso(double nuevoPeso) double calcularIMC() double calcularPesoIdeal(Fecha fechaActual) Fecha int dia int mes int anio int darDia() int darMes() int datAnio() fechaNacimiento fechaIngreso
Métodos Nombre: Parámetros: Retorno: Descripción: public tipo nombre(tipo parametros) { //Cuerpo del método } Parámetros: Retorno: Descripción:
Instrucciones Retorno public class Fecha { // Atributos------------------- private int dia; private int mes; private int anio; // Metodos--------------------- public int darDia() return dia; } public int darMes() return mes; public int darAnio() return anio;
Instrucciones Expresiones Aritméticas var1 11 var2 2 Orden de operadores Operator Descripción Ejemplo Resultado - Negación -var1 -11 ++ Incremento var1++ 12 - - Decremento var1-- 10 * Multiplicación var1*var2 22 / División var1/var2 5.5 % Módulo var1%var2 1 + Adición var1+var2 13 Substracción var1-var2 9 = Asignación var1=var2 var1 2
Instrucciones Expresiones Lógicas Resultado: falso / verdadero (false / true) Operadores relacionales < menor que <= menor o igual > mayor que >= mayor o igual != diferente == igual Operadores lógicos && y (and) || o (or) ! negación (not) valor1 valor2 valor1 OR valor2 valor1||valor2 V F valor1 valor2 valor1 AND valor2 valor1&&valor2 V F valor NOT(valor) !valor V F
Instrucciones Expresiones Reglas de prioridad o precedencia Expresiones entre paréntesis Si hay anidados, de adentro hacia fuera Orden !,-(negación) ++,-- *, /, %, &&, +, -, || <, > ,==,<=,>=,!= Si coinciden varios operadores de igual prioridad en una expresión, de izquierda a derecha
Instrucciones Asignación Operandos Operadores atributoModificarse = expresión; Operandos Elementos de una expresión Operadores Aritméticos Lógicos Relaciones entre los operandos areaTriangulo = base*altura/2;
Instrucciones Asignación public class Paciente { // Atributos------------------------------ private String nombre; private String apellido; private int sexo; //1=masculino,2=femenino private int estatura; private double peso; private Fecha fechaNacimiento; private Fecha fechaIngreso; //Metodos---------------------------------- public void cambiarPeso(double nuevoPeso) peso = nuevoPeso; } public double calcularIMC() return peso/(estatura*estatura); …
Instrucciones Llamada de un método sin parámetros Uso del servicio que proporciona una clase Misma clase nombreMetodo() Otra clase referenciada como atributo nombreAtributo.nombreMetodo()
Instrucciones Llamada de un método con parámetros ¿Cuándo? Declaración Información en sus atributos no es suficiente Declaración Signatura o encabezado de un método modificador tipo de nombre del lista de parametros: tipo nombre de control retorno método de acceso public void metodo1(int a, double b, char c) ¿Cómo se utilizan los valores? Utilizar el nombre del parámetro en el cuerpo, como con los atributos
Instrucciones Llamada de un método con parámetros ¿Cómo se definen los valores? Al hacer la llamada al método, pasar los valores con los que se desea que el método trabaje Constantes Atributos del objeto que hace la llamada Parámetros del método desde el que se hace la llamada Expresiones con los anteriores Relación entre valores y parámetros Los valores se pasan el orden en el que están declarados los parámetros Mismos tipos de datos Mismo número de valores y parámetros
Instrucciones public class C2 { private int art1; private C1 obj; public void m2(int x) obj.m1(x,34+atr1,”prueba”); } public class C1 { public void m1(int param1, int param2, String param3) … }
Instrucciones Creación de objetos new NombreObjeto( ) Objetos del modelo del mundo: creados tipicamente por la interfaz de usuario Una referencia a un objeto se puede guardar en cualquier atributo o variable del mismo tipo.
Diseño de la solución Segunda etapa del proceso de desarrollo de un programa Refinamientos sucesivos Requerimientos funcionales Interfaz de usuario Diseño de la solución Mundo del problema Arquitectura de la solución Requerimientos no funcionales Diseño de las clases
Arquitectura de la solución División del problema en problemas más pequeños Diseño de alto nivel que permita la unión Arquitectura básica con tres grupos de clases: Interfaz de usuario Modelo del mundo Pruebas Cada grupo de clases en un paquete
Construcción de la solución Archivos fuente Organización y convenciones Cliente Archivos compilados Interfaz de usuario Archivos de documentación Construcción de la solución Arquitectura de la solución Archivos empaquetados Usuario Diseño de las clases Archivos ejecutables
Nivel 1 Especificación del problema Análisis del problema Requerimientos funcionales Mundo del problema Requerimientos no funcionales Diseño de la solución Programa: datos y métodos Interfaz de usuario, arquitectura de la solución, diseño de las clases Construcción de la solución
Ejercicios de expresiones Expresión Resultado Operadores 2+3*11= (2+3)*11= 3+7*2-4*6= -3*5+2/4-5= -3*5+2/(4-5)= -(3*5+2)/(4-5)= (-3*5+2)/(4-5)= 3<6 4!=2+1 4.8/(2.6-3)*2= ‘a’==‘A’ !(7>=-2) Expresión Resultado Operadores 1.0>=2*(3.1-2.6) 17>-8 3>2 (17>-8)&&(3>2) (17>-8)||(3>2) !(17>-8) !(17>-8)&&(3>2) (3/4>0.6)&&(5<3) 39%4= (25%8)>(47%6) 39/4= !(!((3>1)&&(2<10))||((4>1)&&(1<2)))
Ejercicios de expresiones Expresión matemática Expresión algorítmica (pasar de oC a oF) (pasar de oF a oK)