Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.

Slides:



Advertisements
Presentaciones similares
Introducción a C++ Sistemas Operativos
Advertisements

Clases en C++.
Introducción Programación.
Lenguaje de programación Java
Ejemplo de Programa C++
Informática II Clase 12: Flujos Diego Fernando Serna Restrepo
Programación Orientada a Objetos en C++
Programación Científica
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
Procedimientos y Funciones
Clase 3: Punteros y Referencias
Programación, Algoritmos y Estructuras de Datos
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Tema Función main Elementos básicos del lenguaje.
INFORMATICA I Arreglos 1 CLASE 17.
INFORMATICA I Arreglos 2 CLASE 18.
Informática II Prof. Dr. Gustavo Patiño MJ
Informática II Prof. Dr. Gustavo Patiño MJ
INFORMATICA I Funciones CLASE 13.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Programación 1 Presentación de c++
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Algoritmos y Estructuras de Datos
Programación Orientada a Objetos en Java
SOBRECARGA DE FUNCIONES
Estructuras de Datos Memoria y Variables. Conceptos Computador: CPU + Memoria + Dispositivos E/S La memoria se encarga de almacenar los datos y los programas.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Funciones en lenguaje C
FUNCIONES EN C.
El lenguaje de programación C - Funciones -
Estructuras de repetición
Introducción a clases Programación Orientada a Objetos.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Unidad I Java y C++ : Similitudes y diferencias
 2003 Prentice Hall, Inc. All rights reserved. 1 Capítulo 6: Clases y Abstracción de Datos Índice del capítulo 6.1 Introducción 6.2 Estructuras 6.3 Clases.
Semana 5 Subprogramas..
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
FUNCIONES EN C.
Archivos.
Elaborado por Fernando Torre - Universidad Simón Bolívar ARREGLOS CI Computación I Universidad Simón Bolívar Dpto. de Computación y Tecnología de.
Patrones Creacionales
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
FIEE VARIABLES Ing. José Antonio Poma G.. FIEE Variables Una variable es un identificador (nombre de la variable) que hace referencia a.
Programación Orientada a Objetos
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Elementos básicos del lenguaje
Unidad II Introducción a la programación en C++
Punteros.
Trazado. 1 Intercambio sin error #include void intercambio(int *, int *); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(&a,&b);
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González ELO329.
1 Definición y Conversión de datos Agustín J. González ELO-329.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO326: Seminario II 2do. Sem
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
INTRODUCCION A LA PROGRAMACION
PRINCIPIOS DE PROGRAMACIÓN
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend)‏ Agustín J. González ELO329.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Arreglos Ejemplo paso a paso. Planteamiento Como estudiante de ingeniería, quieres usar tus habilidades de programador para llevar un registro de tus.
MEMORIA DINÁMICA.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Lenguaje de Programación II PLAN DE EVALUACIÓN CONTENIDO MODALIDAD DE EVAL. PONDERACIÓN INTRODUCCIÓN BÁSICA AL LENGUAJE DE PROGRAMACIÓN.
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Transcripción de la presentación:

Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2

C HISTE DEL D ÍA Informática II 2011/2 2

C ONTENIDO Informática II 2011/2 3 Creación de Espacios Nombres 1 Usando Espacios Nombres 2 3 Espacios Nombre estándar std

V ISIBILIDAD •Es usado para determinar el alcance de… ya sea una variable, una clase, una función. Informática II 2011/2 4 Variables Globales Visibilidad donde se declaro o definió hasta el final del archivo Locales Visibilidad dentro del bloque donde se declaró int globalScopeInt = 5 ; void f( ) { int localScopeInt = 10 ; } int main( ) { int localScopeInt = 15 ; { int anotherLocal = 20 ; int localScopeInt = 30 ; } return 0 ; }

V ISIBILIDAD •Cuando las variables son definidas en instancias (archivos cpp) diferentes: Informática II 2011/2 5 // file first.cpp int integerValue = 0 ; int main( ) { int integerValue = 0 ; //... return 0 ; } ; // file second.cpp int integerValue = 0 ; Int main(){ ….. } // end of second.cpp El compilador revisa cada archivo cpp de manera independiente por lo tanto no generara ningún error al respecto, por qué?. Sin embargo el Linker al tener acceso a ambos archivos cpp encontrará que se presenta una doble declaración de la variable integerValue con el mismo alcance. Si estas dos variables contaran con diferente alcance no habría problema.

•A pesar de que en first.cpp se tiene dos variables definidas con el mismo nombre, cada una de ellas tiene vigencia sobre espacios diferentes del archivo. Dentro de la función main(), prima la variable local integerValue sobre la global. Informática II 2011/2 6 V ISIBILIDAD Qué pasa si deseo tener acceso a la variable global dentro del bloque del main()? // file first.cpp int integerValue = 0 ; int main( ) { int integerValue = 0 ; ::integerValue = 10 ; //assign to global “integerValue” //... return 0 ; } ; // file second.cpp int integerValue = 0 ; int main(){ …. } // end of second.cpp El operador scope (::) Indicando que se está haciendo referencia a la variable integerValue global no local. Aunque el linker seguirá con el problema que encuentra 2 variables con el mismo nombre y mismo ámbito.

E NLACE INTERNO Y EXTERNO DE VARIABLES •poder acceder a una misma variable a través de varios archivos.cpp diferentes. Enlace Externo •Solo se puede tener acceso a una variable en un entorno local (un solo archivo cpp) Enlace Interno Informática II 2011/2 7 // file: first.cpp int externalInt = 5 ; const int j = 10 ; int main() { return 0 ; } // file: second.cpp extern int externalInt ; int anExternalInt = 10 ; const int j = 10 ; El modificador extern permite un enlace externo

•El modificador const permite un enlace interno. Informática II 2011/2 8 E NLACE INTERNO Y EXTERNO DE VARIABLES // file: first.cpp extern const int j = 10 ; // file: second.cpp extern const int j ; #include int main() { std::cout << “j is ” << j << std::endl ; return 0 ; } Si la variable j no tuviera este modificador el linker mostraría un error por tener su definición en dos partes diferentes.

C REACIÓN DE ESPACIOS DE NOMBRES •La forma de declarar un espacio de nombre es similar a como se hace con una clase, solo que no se coloca el ‘;’ al final de la misma, y todos sus miembros internos son públicos y puede ser accedidos sin restricciones. Informática II 2011/2 9 namespace Window { void move( int x, int y) ; } Un espacio de nombre puede contener todo tipo de miembros como funciones, clases, variables, constantes, e incluso otros espacios de nombres anidados.

•La declaración de un espacio de nombre suele ser implementada en un archivo.h con el objetivo de poder incluirla fácilmente en los.cpp donde sea necesaria utilizar sus funcionalidades, o incluso se puede distribuir su declaración en numerosos archivos.h, de este modo varios programadores pueden crear sus respectivos.h independientemente, y luego unir sus funcionalidades y miembros bajo un mismo espacio de nombre. Informática II 2011/2 10 // header1.h namespace Window { void move( int x, int y) ; } // header2.h namespace Window { void resize( int x, int y ) ; } C REACIÓN DE ESPACIOS DE NOMBRES

Informática II 2011/2 11 C REACIÓN DE ESPACIOS DE NOMBRES namespace Window { //... other declarations and variable definitions. void move( int x, int y ) { if( x 0 ) if( y 0 ) platform.move( x, y ) ; // specific routine } void resize( int x, int y ) { if( x 0 ) if( y 0 ) platform.resize( x, y ) ; // specific routine } //... definitions continue } Dentro del la declaración del espacio de nombre es posible definir las funciones, clases y variables sin embargo no es lo ideal pues hace el código menos portable y va en contra de las buenas técnicas de programación

Informática II 2011/2 12 C REACIÓN DE ESPACIOS DE NOMBRES // file_header.h namespace Window { void move( int x, int y) ; // other declarations... } // file_header.h namespace Window { void move( int x, int y) ; // other declarations... } // file impl.cpp #include file_header.h void Window::move( int x, int y) { // code to move the window } // file impl.cpp #include file_header.h void Window::move( int x, int y) { // code to move the window } Nuevos miembros puede ser adicionados pero solo dentro del cuerpo del espacio de nombre respectivo. namespace Window { // lots of declarations } //...some code int Window::newIntegerInNamespace ; // sorry, can’t do this

A NIDANDO ESPACIOS DE NOMBRES Informática II 2011/2 13 namespace Window { namespace Pane { void size( int x, int y ) ; } } Para accede a la función size() desde otra parte se debe especificar la ruta completa de espacios de nombres hasta llegar a su declaración. int main( ) { Window::Pane::size( 10, 20 ) ; return 0 ; }

E JEMPLO Informática II 2011/2 14 #include // Listing 17.1 Using a Namespace namespace Window { const int MAX_X = 30 ; const int MAX_Y = 40 ; class Pane { public: Pane() ; ~Pane() ; void size( int x, int y ) ; void move( int x, int y ) ; void show( ) ; private: static int cnt ; int x ; int y ; }; } int Window::Pane::cnt = 0 ; Window::Pane::Pane() : x(0), y(0) { } Window::Pane::~Pane() { } void Window::Pane::size( int x, int y ){ if( x 0 ) Pane::x = x ; if( y 0 ) Pane::y = y ; } void Window::Pane::move( int x, int y ){ if( x 0 ) Pane::x = x ; if( y 0 ) Pane::y = y ; } void Window::Pane::show( ){ std::cout << "x " << Pane::x ; std::cout << " y " << Pane::y <<std::endl; } int main( ) { Window::Pane pane ; pane.move( 20, 20 ) ; pane.show( ) ; return 0 ; }

C ONTENIDO Informática II 2011/2 15 Creación de Espacios Nombres 1 Usando Espacios Nombres 2 3 Espacios Nombre estándar std

U SANDO E SPACIOS N OMBRES •La palabra clave using Informática II 2011/ •Cuando se desea exponer o tener acceso a todos los miembros de un espacio de nombre se dice que es directiva. 2 •Cuando se especifica cual es miembro a acceder, se habla de declaración.

D IRECTIVA •Una vez utilizada la palabra clave using, ya no se hace necesario escribir el espacio del nombre al cual pertenece la función o variable. Informática II 2011/2 17 namespace Window { int value1 = 20 ; int value2 = 40 ; }... Window::value1 = 10 ; using namespace Window ; value2 = 30 ;

•La valides de using, está contenida en el alcance donde se utilizo, es decir si se hace localmente solo tiene valides sobre esa porción del código, por fuera de esta ya no. Informática II 2011/2 18 D IRECTIVA namespace Window { int value1 = 20 ; int value2 = 40 ; } //... void f() { { using namespace Window ; value2 = 30 ; } value2 = 20 ; } Siempre tiene precedencia lo local sobre lo global namespace Window { int value1 = 20 ; int value2 = 40 ; } //... void f() { int value2 = 10 ; using namespace Window ; std::cout <&l value2 <<std::endl ; } La salida de este programa es 10 no 40 Error

•También es posible que se presenten ambigüedades, pero no se hacen evidentes sino al final, cuando se está haciendo uso directo de una variable declarada en el espacio de nombre y por fuera de este. Informática II 2011/2 19 D IRECTIVA namespace Window { int value1 = 20 ; } //... using namespace Window ; int value1 = 10 ; void f( ) { value1 = 50 ; } La ambigüedad se presenta cuando se entra a la función f().

D ECLARACIÓN •El uso de using como declaración permite escoger campos específicos pertenecientes al namespace y darles la visibilidad o alcance que yo quiera. Informática II 2011/2 20 namespace Window { int value1 = 20 ; int value2 = 40 ; int value3 = 60 ; } //... using Window::value2 ; //bring value2 into current scope Window::value1 = 10 ; //value1 must be qualified value2 = 30 ; Window::value3 = 10 ; //value3 must be qualified

D ECLARACIÓN 1 •Una vez sea traída una variable mediante el operador using con un alcance especifico (local o global), esta actúa como una variable normal y ya no es necesario especificar el espacio de nombre de donde proviene para utilizarla, 2 •Se rige por los aspectos de visibilidad, es decir entra en conflicto con variables del mismo ámbito que se llamen igual. 3 •Es mejor utilizar usign en su forma de declaración pues de este modo se sacan al alcance las variables o métodos que se requieren. Informática II 2011/2 21

A LIAS DE ESPACIOS DE NOMBRE •Se debe tener cuidado que el sobrenombre (apodo o alias) no coincida con otro espacio de nombre declarado. Informática II 2011/2 22 namespace the_software_company { int value ; //... } the_software_company::value = 10 ;... namespace TSC = the_software_company ; TSC::value = 20 ;

E SPACIO DE NOMBRE SIN NOMBRE •Como su nombre lo indica, son aquellos espacios de nombres que no son declarados mediante un nombre en particular Informática II 2011/2 23 // file: one.cpp namespace { int value ; char p( char *p ) ; //... } // file: two.cpp namespace { int value ; char p( char *p ) ; //... } int main( ) { char c = p( ptr ) ; } No se puede tener acceso a un espacio de nombre sin nombre desde un archivo.cpp diferente de donde se declaro inicialmente. Sólo tienen una connotación local No se puede tener acceso a un espacio de nombre sin nombre desde un archivo.cpp diferente de donde se declaro inicialmente. Sólo tienen una connotación local

C ONTENIDO Informática II 2011/2 24 Creación de Espacios Nombres 1 Usando Espacios Nombres 2 3 Espacios Nombre estándar std

E SPACIO DE NOMBRE ESTÁNDAR STD •La librería estándar de C++ está totalmente contenida en el espacio de nombre llamado std. Todas las funciones, objetos, constantes del lenguaje son declarados en esta. Informática II 2011/2 25 #include using namespace std ; Lo ideal sería declarar justamente lo que se necesita o va a ser utilizado. #include using std::cin ; using std::cout ; using std::endl ; int main( ) { int value = 0 ; cout << “So, how many eggs did you say you wanted?” << endl ; cin >> value ; cout << value << “ eggs, sunny-side up!” << endl ; return( 0 ) ; }

Informática II 2011/2 26 E SPACIO DE NOMBRE ESTÁNDAR STD #include int main( ) { int value = 0 ; std::cout << “How many eggs did you want?” << std::endl ; std::cin >> value ; std::cout << value << “ eggs, sunny-side up!” << std::endl ; return( 0 ) ; }

Informática II 2011/2 27

B IBLIOGRAFÍA •Pagina de Referencia lenguaje C++: • am/ am/ •Sams Teach yourselft C++ in 21 days: Heading1 28 Informática II 2011/2

Informática II 2009/2 29