Ambientes de programación

Herramientas a usar 
  

Lenguaje C++ Sistemas Windows y Linux/Unix Ambientes de programación ya instalados en el laboratório Ambiente de programación básico y de fácil instalación

2

Objetivos  



Conocer ambientes de programación multiplataforma (Unix/Win/Mac) Escribir código portable Mantenimiento de código multiplataforma
debuggers 

Control de versiones

3

Ambientes de programación multiplataforma 

Unix
Herramientas de construccion de software 

Makefile (1970), cmake, scons, jam, Otros KDevelop, mono

IDEs  

Windows
Ms .Net Codegear 

Multiplataforma?
4

Make
Default en sistemas UNIX  Windows requiere instalar MSYS (minimal unix system) cerca de 5Mb  El comando make permite compilar programas con un numero grande de archivos, de acuerdo a un conjunto de dependencias  Al ejecutar ³make´ sin argumento busca automáticamente el archivo Makefile, en otro caso es necesario especifical el nombre con ³make ±f archivo´ Ejemplo: main.obj : main.c gcc -c main.c 

5

Ejemplo completo
project.exe : main.obj io.obj gcc -o project.exe main.obj io.obj main.obj : main.c gcc -c main.c io.obj : io.c gcc - c io.c

6

Make 

Problemas:
shell scripts complejos 
 

Difíciles de mantener Difíciles para debugar Puede ser necesario usar diferentes comandos shell en plataformas diferentes 

Alternativas
Scons 

Basado en lenguaje python

7

MSYS como herramienta de desarrollo en Windows 

Necesario un compilador
MinGW (cerca de 100Mb) 


Compilador GNU C++ para windows Compatible con UNIX C++ estandar 

Un IDE básico
Editor Crimson + mingw + msys + make

8

Ambientes de programación completos 

Ms .net
En sistemas Unix puede ser ejecutado con mono con restricciones 

Qt Nokia
Multiplataforma 

Qt Creator 

Otros

9

Escribir código portable 
  

Sinónimo de multiplataforma No Ms MFC Ms Forms parcialmente con mono C++ Standard
Soportado por Visual Studio C++ con diferencias mínimas

10

Mantenimiento y depuración de código 

Unix
Gdb 

Windows
Ms Visual Studio

11

Control de versiones  

Una forma de manejar complejidad y modificar vía colaboración (equipo de trabajo), comunicación, y coordinación. Una central de almacenamiento para el proyecto (documentación, código, etc.) Miembros del equipo 

³check out´ y ³check in´ en archivos modificados. 

Mantener cambios de cada archivo del proyecto (historial). Cuando un miembro del equipo modifica un archivo y realiza un check in, el VCS incrementa un número de revisión y mantiene la versión anterior del archivo. Versiones anteriores de cada archivo siempre pueden ser recuperadas. Versiones diferentes archivos de texto pueden ser comparados para ver los cambios o pequeñas diferencias.
12

Version Control System Conceptual Design
John
edit

VCS Server

commit checkout Working copies

Mary
Repository checkout update commit edit

Conflicto! Mary no tiene los ultimos cambios de John¶s

Working copies

13

Resolviendo de conflictos Commit 

Solución
Cuando Mary intenta enviar (commit) sus modificaciones, ve que hay un conflicto. Mary debe hacer una actualizaciónpara obtener los cambios de John. Ahora Mary debe resolver el conflicto manualmente con sus cambios y los de John. Finalmente, Mary puede enviar el archivo

14

Resumen VCS 

checkout
Crear una copia local del repositorio. 

commit
Enviar las modificaciones para el repositorio. 

update
Actualiza a su copia local las ultimas versiones de archivos del repositorio. 

Conflictos
Resolver conflictos manualmente entre su copia local y la ultima versión del repositorio.
15

Sistemas de control de version 
 

CVS SVN Trac

16

Introducción a los lenguajes de alto nivel

Objetivos 

Comprender
Donde estamos Lenguajes de alto nivel 

Introducción al lenguaje C++  

Almacenamiento de datos
Tipos de sentencias
18

Objectivos 
   

Juntando las piezas Manejando complexidad Programación orientada a objetos Programación Gráfica El objetivo principal: Ingeniería de software

19

Donde estamos 

Primeros días de la computación
Lenguaje ensamblador 

Programas escritos por personal técnico 

Actualmente
Programadores buscan un ambiente de programación cómodo 

Programas pueden ser escritos por personal no técnico.
20

Lenguajes de alto nivel
Llamados lenguajes de tercera generación Supera deficiencias encontradas con el lenguaje ensamblador El programador no necesita manejar detalles de almacenamiento de datos

21

Lenguajes de alto nivel 

Lo que se espera de un lenguaje de alto nivel
El programa será portable El código será cercano a un estándar, con notaciones estándar

22

23

Introducción al lenguaje C++ 

La figura anterior muestra algunos componentes
Comentarios 

Provee información para lectores humanos El enlazador incluye código objeto o de librerías

Directivas de inclusión 

Usando directivas 

Le dice al compilador que verifique en los ³namespace´ si existe definiciones no mencionadas en el programa
24

Un programa C++ Simple
25

La forma general de un programa C++

26

Almacenamiento de datos 

Identificadores: Nombres en un lenguaje de programación Palabras clave: Tienen significado especial en C++ C++ es sensible a los caracteres Items de datos pueden ser constantes o variables   

27

Almacenamiento de datos 

Una declaración de item de datos dice:
Si el item es una constante o una variable El identificador usado para nombrar el item El tipo de dato del item

28

Algunos tipos de datos C++ Standard

29

Almacenamiento virtual de datos 

Un arreglo (array)
Son una colección de posiciones de memoria, todos almacenan datos del mismo tipo

Una colección de 12-Elementos

30

Tipos de sentencias 

Sentencias de entrada/salida
Sentencias de entrada 

Guarda un valor especifico del usuario para una variable dentro del programa

Sentencias de salida 

Escribe un mensaje o el valor de una variable del programa en una pantalla o un archivo
31

Tipos de sentencias 

Sentencias de asignacion
Asigna un valor a una variable del programa 

Sentencias de control
Dirigen el flujo de control 

Puede causar que se desvie del flujo secuencial usual
32

Sentencias de entrada/salida 

Ejemplo
Pseucodigo
Get value for Radius

C++
cin >> Radius; 


cin: flujo de entrada Operador de extracción (>>) y la definición de cin están en la librería iostream del std namespace
33

Sentencias de entrada/salida 

Ejemplo
Pseudo código
Print the value of Circumference

C++
cout << Circumference; 


cout: Flujo de salida Operador de inserción (<<) la definición de cout stream están en la librería iostream del std namespace
34

Sentencias de asignación 

Forma general
Pseudo código
Set the value of ³variable´ to ³arithmetic expression´

C++
variable = expression;
1. 2.

Expression en el lado derecho es evaluado El resultado es escrito en la localización de memoria de la variable

35

Sentencias de control 

Tipos de mecanismos de control
Secuencial 

Las instrucciones son ejecutadas en orden

Condicional 

Escoger cual instrucción ejecutar despues depende de alguna condicion

Iteraciones 

Grupos of instrucciones pueden ser ejecutados varias veces
36

Sentencias de control 

Secuencial es el modo común de ejecución Control de flujo condicional
Evaluación de una condición booleana (también llamada expresión booleana) Cual sentencia de programación a ser ejecutada después es determinada en base al valore de la condición boleana (verdadero o falso)
37 

Sentencias de control 

Flujo de control condicional
Sentencia if-else
if (Boolean condition) S1; else S2;

Sentencia if es variación de if-else
if (Boolean condition) S1;

38

Flujo de control condicional (If-Else)

39

If-Else con Else vacio

40

Sentencias de control 

Iteraciones
El cuerpo de la iteración puede ser ejecutado repetitivamente basado en el valor de la condición booleana Sentencia while
while (Boolean condition) S1;

41

While Loop

42

Poniendo todas la piezas juntas 

En este punto, podemos
Ejecutar entrada y salida Asignar valores a variables Controlar el flujo de control de sentencias de control e iteraciones 

Para un programa completo, necesitamos
Ensamblar las sentencias en el correcto orden Llenar las piezas que faltan
43

Encuentro con las espectativas 

C++ reúne las cuatro expectativas para un lenguaje de alto nivel
Un programador no necesita manejar los detalles del movimiento de items de datos dentro de la memoria, ni prestar atencion donde ellos estan almacenador.

44

Encuentro con las espectativas
El programador puede tomar una visión macroscopica de las tareas, pensando a un alto nivel para solucionar el problema Programas escritos en lenguajes de alto nivel serán portables Sentencias de programación en un lenguaje de alto nivel 


Serán cercanos al standard English Usaran notación matematica standard
45

Menejando complexidad: Divide y conquista
Para solucionar un problema divide en pequeños pedazos 

En un programa de computadora
Divide el codigo en módulos (sub programas), cada uno haciendo una parte de toda la tarea Unir estos módulos para que trabajar juntos para solucionar el problema original

46

47

Usando funciones 

Función
Un modulo de código en C++ 

Funciones de subtareas: Opcional La función ³main´: Obligatorio 

48

Usando funciones 

Para invocar una función de subtarea, la funcion ³main´ da
Nombre de la función Lista de argumentos de la función 

Lista de argumentos: lista de identificadores para variables que conciernen a la función Toda función puede tener sus propias constantes y declaraciones de variables
49 

Escribiendo funciones 

La declaración de una función consiste de:
Indicador de retorno: clasifica a una función de tipo void o no void Identificador de función (nombre) Lista de parametros 

Por defecto, los argumentos en C++ son pasador por valor
50

Una función en C++
51

Terminología C++

52

Programación orientada a objetos
Un programa es una simulación de una parte del mundo que es el dominio de interés Cada objeto es un ejemplo de una clase de objetos similares 

Puntos clave
Encapsulación 


Una clases consiste de sus módulos y propiedades Ambos son encapsulados en la clase

53

Programación orientada a objetos
Herencia 

Una vez que una clase A de objetos es definido, una clase B of objetos puede ser definido como una subclase de A

Polimorfismo 

Una clase C de objetos es definido a partir de dos (A y B) o mas clases de objetos, entonces un objeto de la clase C puede adoptar la forma de uyn objeto de la clase A o B
54

Que ganamos con esto? 

Dos ventajas importantes
Reuso de software

Una forma natural de abstraer el mundo

55

Programación gráfica: Primitivas gráficas 

Display de pixels
Grid bidimensional de pixels 

Frame buffer
La memoria de video almacena la actual imagen de la pantalla

56

Coordenadas del sistema de píxeles en el display
57

Primitivas gráficas 

Librerias gráficas
Software que contiene una colección de funciones que controlan la atribución/configuración/cambios de píxeles 

La mayoría de lenguajes modernos tienen una librería gráfica.
58

El asunto central: Ingeniería de Software 

Ciclo de vida de un Software
Sobre todo una secuencia de pasos que necesitan ser completados en un proyecto de software de grande porte

La implementación representa una pequeña parte del ciclo

59

Pasos del ciclo de vida del desarrollo de software

60

Planificando 

Programas escritos por estudiantes
No mas que pocos miles de lineas 

Programas del mundo real
2, 3, o 4 veces mas grandes 

Desarrollo de software de grande escala
Requiere planeamiento y diseño extensivo Requiere un equipo de programadores Ingeniería de Software
61

Ciclo de vida de un Software 

Pasos en el software
Tiene un proposito especifico y actividades Debe retornar algun resultado visual o impreso 

 

El estudio de factibilidad La especificación del problema Diseñoo del programa
62

Ciclo de vida de un Software 

Selección del algoritmo o técnica de desarrollo, y analisis Codificación Debug Prueba, verificación, y comparaciones Documentación Mantenimiento
63 

   

Ambientes de desarrollo modernos 

Integrated Development Environment (IDE) agiliza el proceso de desarrollo proveyendo
Un editor de texto Un manipulador de archivos Un compilador Un enlazador (linker) Herramientas para debug
64