Tema 7 Apuntadores

(1)

Tema VII. Metodología de desarrollo de

proyectos básicos de software

Objetivo: El alumno elaborará un proyecto básico de software aplicando la teoría del diseño de programas y herramientas de desarrollo


(2)

7.1 Fases en el desarrollo de proyectos de software

Apuntadores

Cuando una variable se declara, se asocian tres atributos fundamentales con la misma: su nombre, su tipo y su dirección en memoria. Al valor de una variable se accede por medio de su nombre. A la dirección de la variable se accede mediante el operador de dirección &. Un apuntador es una variable que contiene una dirección de una posición de memoria que puede corresponder o no a una variable declarada en el programa. La declaración de una variable apuntador debe indicar el tipo de dato al que apunta; para ello se hace preceder a su nombre con un asterisco *.


(3)

7.1 Fases en el desarrollo de proyectos de software

CASA DIRECCION DE MEMORIA NOMBRE

VARIABLE

DATO


(4)

(5)

(6)

7.1 Fases en el desarrollo de proyectos de software

Declaración de apuntadores

La forma general de la declaración de un apuntador es:

tipo_de_dato *nombre_apuntador

tipo_de_dato especifica el tipo de datos al que apunta el apuntador.

nombre_apuntador es el nombre de la variable de apuntador, el cual puede ser cualquier nombre válido de variable en C.


(7)

(8)

(9)

7.1 Fases en el desarrollo de proyectos de software

aptr_y

aptr_x

0022FF30

0022FF38

aptr_c

y

0022FF40

0022FF34

x

c

0022FF3C

0022FF47

. . .

0022FF34

0022FF3C

0022FF47

123.45

7

A

. . *aptr_y *aptr_x *aptr_c


(10)

7.1 Fases en el desarrollo de proyectos de software

El operador de dirección &

El lenguaje C también proporciona un operador, &, que puede utilizar en caso de que desee saber el valor izquierdo de una variable. Este operador se llama operador de dirección debido a que se evalúa como la dirección (es decir, el valor izquierdo) de una variable.

int x; int *y; y = &x;


(11)

7.1 Fases en el desarrollo de proyectos de software

NOTA:

El estándar ANSI maneja el especificador de

formato %p utilizado en la función printf(). Si

por algún motivo el compilador que esta

manejando no acepta %p, puede intentar

utilizar %u o %lu en la función printf() para

convertir e imprimir una dirección.


(12)

(13)

7.1 Fases en el desarrollo de proyectos de software

El operador de indirección

En C el

*

se llama

operador de indirección

cuando se usa

como operador unario. Se puede hacer referencia al valor de

una variable mediante la combinación del operador * y su

operando, el cual contiene la dirección de la variable.


(14)

7.1 Fases en el desarrollo de proyectos de software

Apuntadores NULOS

Se dice que un apuntador es nulo cuando su valor derecho es 0. Un apuntador nulo nunca puede apuntar a datos válidos. Por esta razón, puede verificar un apuntador para ver si tiene asignado 0; si es así, se sabe que se trata de un apuntador nulo y que no es válido.

char *aptr_c; int *aptr_int;


(15)

7.1 Fases en el desarrollo de proyectos de software

Aritmética de apuntadores

A un apuntador se le puede sumar o restar un entero n; esto hace que apunte n posiciones adelante o atrás de la actual. A una variable puntero se le puede aplicar el operador ++, o el operador --. Esto hace que contenga la dirección siguiente, o anterior elemento. No tiene sentido, sumar o restar una constante de punto flotante.


(16)

7.1 Fases en el desarrollo de proyectos de software

Operadores no válidas con apuntadores

• No se pueden sumar dos apuntadores

• No se pueden multiplicar dos apuntadores


(17)

7.1 Fases en el desarrollo de proyectos de software

Resumen

• Un apuntador es una variable cuyo valor apunta a otra variable.

• El operador de dirección (&) se puede usar para obtener la dirección en memoria de una variable.

• En una declaración de apuntador, el asterisco (*) le indica al compilador que la variable es una variable de apuntador.

• Puede actualizar el valor de una variable a la que hace referencia una variable de apuntador.

• Varios apuntadores pueden apuntar a la misma ubicación de una variable en la memoria.


(18)

7.1 Fases en el desarrollo de proyectos de software

Actualización de variables por medio de

apuntadores

El objetivo es que puede escribir un nuevo valor en la ubicación de memoria de una variable empleando un apuntador que contenga el valor de la dirección de memoria de dicha variable.


(19)

(20)

(21)

7.1 Fases en el desarrollo de proyectos de software

Encuentre los errores en la siguiente declaración

de apuntadores

int x, *p, &y;

char* b= "Cadena larga";

char* c= 'C';

float x;


(22)

7.1 Fases en el desarrollo de proyectos de software

Debido a que un nombre de arreglo al que no le sigue un índice se interpreta como un apuntador al primer elemento del arreglo, se puede asignar la dirección de inicio de un arreglo a un apuntador del mismo tipo de datos; luego puede acceder a cualquier elemento del arreglo sumando el entero apropiado al apuntador. El valor del entero que utiliza es el mismo que el valor del índice del elemento al que desea acceder.


(23)

7.1 Fases en el desarrollo de proyectos de software

En otras palabras, dado un arreglo, arreglo, y un apuntador,

aptr_arreglo, si arreglo y aptr_arreglo son del mismo tipo de datos, y

aptr_arreglo contiene la dirección de inicio del arreglo, es decir:

aptr_arreglo = arreglo;

Entonces la expresión arreglo[n] equivale a la expresión

*(aptr_arreglo + n)


(24)

(25)

(26)

7.1 Fases en el desarrollo de proyectos de software

Lectura y Escritura de Archivos

Flujo

Un flujo (stream) es una abstracción que se refiere a un flujo o corriente de datos que fluyen entre un origen o fuente y un destino. Entre el origen y el destino debe existir una conexión o canal por la cual circulen los datos. La apertura de un archivo supone establecer la conexión del programa con el dispositivo que contiene al archivo.


(27)

7.1 Fases en el desarrollo de proyectos de software

Como abrir archivos

La función fopen() de E/S de C, abre un archivo y le asocia un flujo. Es necesario especificar el método de apertura del archivo y el nombre del mismo como argumentos para la función fopen().

La sintaxis de la función fopen() es

#include <stdio.h>


(28)

7.1 Fases en el desarrollo de proyectos de software

r Abre un archivo en modo lectura

w Abre un archivo en modo lectura

a Abre un archivo en modo agregable

r+ Abre un archivo ya existente para modificar (lectura / escritura) w+ Crea un archivo para escribir / leer (si ya existe se pierden los datos)

a+ Abre un archivo para modificar (escribir / leer) al final.

rb Abre un archivo binario en modo lectura

wb Abre un archivo binario en modo lectura

ab Abre un archivo binario en modo agregable

r+b Abre un archivo binario ya existente para modificar (lectura / escritura) w+b

Crea un archivo binario para escribir / leer (si ya existe se pierden los datos)

a+b Abre un archivo binario para modificar (escribir / leer) al final.


(29)

7.1 Fases en el desarrollo de proyectos de software

Como cerrar un archivo

Después de leer, escribir o agregar algunos datos nuevos a un archivo en disco, tiene que disociar el archivo de un flujo específico por medio de una llamada a la función fclose().

La sintaxis de la función fclose() es

#include<stdio.h> Int fclose(FILE *flujo)


(30)

(31)

7.1 Fases en el desarrollo de proyectos de software

Principios de diseño de Sistemas de Software

El diseño de sistemas de software de calidad requiere el cumplimiento de una serie de características y objetivos. En un sentido general, los objetivos que se consideran útiles en el diseño de sistemas incluyen al menos los siguientes principios:


(32)

7.1 Fases en el desarrollo de proyectos de software

1. Modularidad mediante diseño descendente.

2. Abstracción y ocultamiento de la información.

3. Modificabilidad

4. Comprensibilidad y fiabilidad

5. Interfaces de usuario.

6. Programación segura contra fallos

7. Facilidad de uso.

8. Eficiencia

9. Estilo de programación.

10. Depuración.


(33)

7.1 Fases en el desarrollo de proyectos de software

1. Modularidad mediante diseño descendente.

La descomposición del problema se realiza a través de un diseño descendente que a través de niveles sucesivos de refinamiento se obtendrán diferentes módulos.

La modularidad tiene un impacto positivo en los siguientes aspectos de la programación.

 Construcción del programa.

 Depuración del programa.

 Legibilidad.


(34)

7.1 Fases en el desarrollo de proyectos de software

2. Abstracción y ocultamiento de la información

La abstracción indica especificaciones funcionales de cada caja negra; es responsable de su vista externa o pública. Sin embargo, la abstracción ayuda también a identificar detalles de lo que se puede

ocultar de la vista pública –detalles que no están en las especificaciones pero deben ser privados

El principio de ocultación de la información no sólo oculta detalles dentro de la caja negra sino también asegura que ninguna otra caja negra pueda acceder a estos detalles ocultos.


(35)

7.1 Fases en el desarrollo de proyectos de software

3. Modificabilidad

La modificabilidad se refiere a los cambios controlados de un sistema dado. Un sistema se dice que es modificable si los cambios en los requisitos pueden adecuarse bien a los cambios en el código.


(36)

7.1 Fases en el desarrollo de proyectos de software

4. Comprensibilidad y fiabilidad

Un sistema se dice que es comprensible si refleja directamente una visión natural del mundo. Una característica de un sistema eficaz es la simplicidad. En general, un sistema sencillo puede ser comprendido más fácilmente que uno complejo.

Un objetivo importante en la producción de sistemas es el de la fiabilidad. El objetivo de crear programas fiables ha de ser crítico en la mayoría de las situaciones.


(37)

7.1 Fases en el desarrollo de proyectos de software

5. Interfaces de usuario

Otro criterio importante a tener presente es el diseño de la interfaz del usuario. Algunas directrices a tener en cuenta pueden ser:

 En un entorno interactivo se ha de tener en cuenta las preguntas posibles al usuario y sobre todo aquellas que solicitan entradas de usuario.

 Etiquetar la salida con cabeceras y mensajes adecuados.


(38)

7.1 Fases en el desarrollo de proyectos de software

6. Programación segura contra fallos

Un programa es seguro contra fallos cuando se ejecuta razonablemente por cualquiera que lo utilice. Para conseguir este objetivo se han de comprobar los errores en datos de entrada y en la lógica del programa.


(39)

7.1 Fases en el desarrollo de proyectos de software

7. Facilidad de uso

La utilidad de un sistema se refiere a su facilidad de uso. Esta propiedad ha de tenerse presente en todas las etapas del ciclo de vida, pero es vital en la fase de diseño e implementación.


(40)

7.1 Fases en el desarrollo de proyectos de software

8. Eficiencia

El objetivo de la eficiencia es hacer un uso óptimo de los recursos del programa. Tradicionalmente, la eficiencia ha implicado recursos de tiempo y espacio. Un sistema eficiente es aquel cuya velocidad es mayor con el menor espacio de memoria ocupada. Aunque hoy en día ya no se mide con los mismos parámetros de memoria y tiempo que en años anteriores.


(41)

9. Estilo de programación

Un estilo de programación se refiere a la forma en que se da formato al código fuente. Para C, esto involucra la forma en que se ubican las llaves, se indenta el código y se utilizan los paréntesis.

Debe de ser un buen hábito para los programadores marcando su personalidad o integración con el equipo.

Claro está que estos estilos pueden depender de diferentes factores entre ellos el lenguaje de programación, la dimensión de las aplicaciones y


(42)

10. Depuración

Es el proceso de identificar y corregir errores de programación. En inglés se conoce como debugging, ya que se asemeja a la eliminación de bichos.

Si bien existen técnicas para la revisión sistemática del código fuente y se cuenta con medios computacionales para la detección de errores (depuradores), sigue siendo en buena medida una actividad manual, que desafía la paciencia, la imaginación y la intuición del programador. Muchas veces se requiere incluir en el código fuente instrucciones auxiliares que permitan el seguimiento de la ejecución del programa, presentado los valores de variables y direcciones de memoria y ralentizando la salida de datos.


(43)

11. Documentación

Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de referencia, así como normas para el mantenimiento.


(44)

7.2 Herramientas de desarrollo en entornos visuales


(45)

7.2 Herramientas de desarrollo en entornos visuales


(46)

7.2 Herramientas de desarrollo en entornos visuales


(47)

7.2 Herramientas de desarrollo en entornos visuales

GNAT Programming Studio


(48)

7.2 Herramientas de desarrollo en entornos visuales


(49)

7.2 Herramientas de desarrollo en entornos visuales


(50)

(1)

7.2 Herramientas de desarrollo en entornos visuales

Ing. Tanya Arteaga Ricci


(2)

7.2 Herramientas de desarrollo en entornos visuales

Ing. Tanya Arteaga Ricci


(3)

7.2 Herramientas de desarrollo en entornos visuales

Ing. Tanya Arteaga Ricci

GNAT Programming Studio


(4)

7.2 Herramientas de desarrollo en entornos visuales

Ing. Tanya Arteaga Ricci


(5)

7.2 Herramientas de desarrollo en entornos visuales

Ing. Tanya Arteaga Ricci


(6)

7.3 Elaboración de un proyecto básico de software