Sunteți pe pagina 1din 16

Programacion Avanzada

Fundamentos de Programacin Orientada a Objetos en Lenguaje C


Edgardo Enrique De la Cruz Moreno / 4 Semestre de Ingeniera Petrolera

24-9-2013
0

Contenido
1) Introduccin. Un Poco de Historia .......................................................................................... 2 2) Programacin Avanzada en Lenguaje C.................................................................................. 3 i) Puntadores y arreglos de apuntadores ..................................................................... 3

ii) Estructuras ................................................................................................................. 6 iii) Archivos ..................................................................................................................... 7 iv) Entornos Visuales y Depuradores .............................................................................. 7 3) Fundamentos de la Programacin Orientada a Objetos ...................................................... 10 a) Paradigmas de Programacin ........................................................................................ 10 i) Programacin Imperativa ........................................................................................ 10

ii) Programacin Funcional .......................................................................................... 11 iii) Programacin Lgica ............................................................................................... 11 iv) Programacin Declarativa ....................................................................................... 11 v) Programacin Orientada a Objetos ......................................................................... 11 b) Conceptos de Programacin Orientada a Objetos......................................................... 12 i) Objetos: Estados, Comportamiento e Identidad ..................................................... 12

ii) Mtodos................................................................................................................... 13 iii) Clases ....................................................................................................................... 13 iv) Herencia ................................................................................................................... 14 v) Encapsulamiento ..................................................................................................... 14 vi) Poliformismo ........................................................................................................... 14 4) Bibliografa ............................................................................................................................ 15

Introduccin. Un Poco de Historia


C es un lenguaje de programacin diseado por Dennis Ritchie, de los Laboratorios Bell, y se instal en un PDP-11 en 1972; se dise para ser el lenguaje de los Sistemas Operativos A su vez, UNIX es un Sistema Operativo desarrollado por Ken Thompson, quin utiliz el lenguaje ensamblador y un lenguaje llamado B para producir las versiones originales de UNIX, en 1970. C se invent para superar las limitaciones de B. C es un lenguaje maduro de propsitos generales que se desarroll a partir de estas races; su definicin aparece en 1978 en el apndice C Reference Manual del libro The C Programming Language, de Brian W. Kernighan y Dennis M. Ritchie (Englewood Cliffs, Nueva Jersey, Prentice-Hall 1978), pero el estndar recomendable ms reciente apareci en junio de 1983, en el documento de los Laboratorios Bell titulado The C Programming Language-Reference Manual, escrito por Dennis M. Ritchie.

Programacin Avanzada en Lenguaje C


Generalizando, un programa en C consta de tres secciones. La primera seccin es donde van todos los headers. Estos headers son comnmente los #define y los #include. Como segunda seccin se tienen las ``funciones. Al igual que Pascal, en C todas las funciones que se van a ocupar en el programa deben ir antes que la funcin principal (main()). Declarando las funciones a ocupar al principio del programa, se logra que la funcin principal est antes que el resto de las funciones. Ahora, solo se habla de funciones ya que en C no existen los procedimientos. Y como ltima seccin se tiene a la funcin principal, llamada main. Cuando se ejecuta el programa, lo primero que se ejecuta es esta funcin, y de ah sigue el resto del programa. Los smbolos { y } indican begin y end respectivamente. Si en una funcin o en un ciclo while, por ejemplo, su contenido es de solamente una lnea, no es necesario usar ``llaves ({ }), en caso contrario es obligacin usarlos.

Puntadores y arreglos de apuntadores Un apuntador es solo una direccin de una pieza de datos en la memoria (Griffiths & Griffiths, 2012)1. Los punteros permiten simular el paso por referencia, crear y manipular estructuras dinmicas de datos, tales como listas encadenadas, pilas, colas y rboles. Generalmente las variables contienen valores especficos. Los punteros son variables pero en vez de contener un valor especifico, contienen las direcciones de las variables a las que apuntan. Para obtener o modificar el valor de la variable a la que apuntan se utiliza el operador de indireccin. Los punteros, al ser variables, deben ser declaradas como punteros antes de ser utilizadas. Los arreglos son una coleccin de variables del mismo tipo que se referencian utilizando un nombre comn. Un arreglo consta de posiciones de memoria contigua. La direccin ms baja corresponde al primer elemento y la ms alta al ltimo. Un arreglo puede tener una o varias dimensiones. Para acceder a un elemento en particular de un arreglo se usa un ndice. El formato para declarar un arreglo unidimensional es: tipo nombre_arr [ tamao ] Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez elementos se hace de la siguiente forma:
1

A pointer is just the address of a piece of data in memory.

int listanum[10]; En C, todos los arreglos usan cero como ndice para el primer elemento. Por tanto, el ejemplo anterior declara un arreglo de enteros con diez elementos desde listanum[0] hasta listanum[9]. La forma como pueden ser accesados los elementos de un arreglo, es de la siguiente forma: listanum[2] = 15; /* Asigna 15 al 3er elemento del arreglo listanum*/ num = listanum[2]; /* Asigna el contenido del 3er elemento a la variable num */ El lenguaje C no realiza comprobacin de contornos en los arreglos. En el caso de que sobrepase el final durante una operacin de asignacin, entonces se asignarn valores a otra variable o a un trozo del cdigo, esto es, si se dimensiona un arreglo de tamao N, se puede referenciar el arreglo por encima de N sin provocar ningn mensaje de error en tiempo de compilacin o ejecucin, incluso aunque probablemente se provoque el fallo del programa. Como programador se es responsable de asegurar que todos los arreglos sean lo suficientemente grandes para guardar lo que pondr en ellos el programa. C permite arreglos con ms de una dimensin , el formato general es: tipo nombre_arr [ tam1 ][ tam2 ] ... [ tamN]; Por ejemplo un arreglo de enteros bidimensionales se escribir como: int tabladenums[50][50]; Observar que para declarar cada dimensin lleva sus propios parntesis cuadrados. Para acceder los elementos se procede de forma similar al ejemplo del arreglo unidimensional, esto es, tabladenums[2][3] = 15; /* Asigna 15 al elemento de la 3 fila y la 4 columna*/ num = tabladenums[25][16]; Los arreglos pueden contener apuntador. Uno de los usos comunes de los arreglos de apuntadores es el de formar un arreglo de cadenas, llamado tambin arreglo cadena. Cada elemento en el arreglo es una cadena, pero en C una cadena es, en esencia, un apuntador a su primer carcter. De modo que cada entrada en el arreglo de cadenas es en realidad un apuntador al primer carcter de la cadena. 4

Existe una relacin estrecha entre los punteros y los arreglos. En C, un nombre de un arreglo es un ndice a la direccin de comienzo del arreglo. En esencia, el nombre de un arreglo es un puntero al arreglo. Considerar lo siguiente: int a[10], x; int *ap; ap = &a[0]; /* ap apunta a la direccion de a[0] */ x = *ap; /* A x se le asigna el contenido de ap (a[0] en este caso) */ *(ap + 1) = 100; /* Se asigna al segundo elemento de 'a' el valor 100 usando ap*/ Como se puede observar en el ejemplo la sentencia a[t] es idntica a ap+t. Se debe tener cuidado ya que C no hace una revisin de los lmites del arreglo, por lo que se puede ir fcilmente ms alla del arreglo en memoria y sobreescribir otras cosas. C sin embargo es mucho ms stil en su relacin entre arreglos y apuntadores. Por ejemplo se puede teclear solamente: ap = a; en vez de ap = &a[0]; y tambin *(a + i) en vez de a[i], esto es, &a[i] es equivalente con a+i. Y como se ve en el ejemplo, el direccionamiento de apuntadores se puede expresar como: a[i] que es equivalente a *(ap + i) Sin embargo los apuntadores y los arreglos son diferentes: Un apuntador es una variable. Se puede hacer ap = a y ap++. Un arreglo NO ES una variable. Hacer a = ap y a++ ES ILEGAL. Este parte es muy importante, asegrese haberla entendido. Con lo comentado se puede entender como los arreglos son pasados a las funciones. Cuando un arreglo es pasado a una funcin lo que en realidad se le esta pasando es la localidad de su elemento inicial en memoria.

Estructuras A veces en otros lenguajes un registro es una estructura es capaza de almacenar muchos elementos de datos relacionados, de distintos tipos de datos, bajo un nombre. Por ejemplo, el almacenar informacin sobre cada uno de los empleados de una empresa. Las estructuras de datos se emplean con el objetivo principal de organizar los datos contenidos dentro de la memoria del ordenador. As, nuestra primera experiencia con estructuras comienza desde el momento mismo en que usamos en nuestros programas variables de tipos primitivos (char, short, int, float, etc). A la memoria del ordenador se le puede considerar como un gran bloque compuesto por una serie de BYTES dispuestos secuencialmente uno detrs de otro. por ejemplo, si un ordenador posee una memoria de 128MB (128 megas) entonces se le puede leer o escribir desde el BYTE 0 hasta el BYTE 128MB - 1 ( 0000000H .. 7FFFFFFH ). La idea de ver la memoria como un serie de bytes es buena, sin embargo no es suficiente ya que en la misma podemos guardar nmeros, cadenas de caracteres, funciones, objetos, etc. de tal manera que surge la necesidad de establecer los mecanismos adecuados para dar cuenta de la forma, tamao y objetivo de los datos almacenados. Segn el tipo de microprocesador, estos tienen la capacidad para manipular o direccionar estructuras compuestas por uno, dos, cuatro, etc, bytes; de donde se derivan los tipos que comunmente se conocen como: BYTE, WORD, DWORD, QWORD y TWORD. La estructura mnima de informacin manipulable en un sistema de memoria de ordenadores es el BIT el cual se agrupa normalmente en bloques de 8 para formar un BYTE. Cabe mencionar que los BITS no son direccionables directamente, sino a travez de compuertas AND, OR, NOT, XOR, mismas que en C,C++ se escriben como &, |, ~ y ^ conocidos como "Bitwise operators". En C,C++ existe una serie de estructuras bsicas o tipos primitivos, los cuales pueden ser usados por el programador para declarar variables, y tambin son el fundamento sobre el cual se crean estructuras complejas. El tamao de los tipos primitivos no es estndar ya que los mismos dependen de factores tales como el tipo del microprocesador y el compilador. Sin embargo, en la actualidad, la mayoria de compiladores de C,C++ soportan los siguientes tipos con la longitud indicada: Nombre comn BYTE WORD DWORD DWORD DWORD Nombre C char short int long float Longitud 8 bits 16 bits 32 bits 32 bits 32 bits 6

QWORD TWORD

double long double

64 bits 80 bits

En el lenguaje C,C++ existe el operador sizeof(), con el cual se puede obtener el tamao (nmero de bytes) ocupados por un tipo especfico. Por ejemplo, sizeof(int) regresa el nmero de bytes ocupados por lo datos de tipo int.

Archivos Un archivo de cabecera es un archivo especial que contiene declaraciones de elementos y funciones de la biblioteca. Para utilizar macros, constantes, tipos y funciones almacenadas en biblioteca, un programa debe utilizar la directiva #include para insertar el archivo de cabecera correspondiente. Por ejemplo, si un programa utiliza la funcin pow que se almacena en la biblioteca math.h, debe contener la directiva #include <math.h> para hacer que el contenido de la biblioteca matemtica est disponible a un programa. La mayora de los programas contienen lneas como sta al principio incluyen en el momento de compilacin. #include <stdio.h> /* o bien*/ #include stdio.h

Entornos Visuales y Depuradores Un entorno de desarrollo de software es una combinacin de herramientas que automatiza o soporta al menos una gran parte de la tareas (o fases) del desarrollo: anlisis de requisitos, diseo de arquitectura, diseo detallado, codificacin, pruebas de unidades, pruebas de integracin y validacin, gestin de configuracin, mantenimiento, etc. Las herramientas deben estar bien integradas, pudendo interoperar unas con otras. Las actividades mejor soportadas por herramientas de desarrollo son normalmente la centrales: codificacin y pruebas de unidades. El conjunto de herramientas que soportan estas actividades constituyen lo que se llama un entorno de programacin. A veces se utilizan las siglas IDE (Integrated Development Environment) para designar estos entornos, aunque no son un entorno de desarrollo completo, sino slo una parte de l. 7

Como se ha dicho, la misin de un Entorno de Programacin es dar soporte a la preparacin de programas, es decir, a las actividades de codificacin y pruebas. Las tareas esenciales de la fase de codificacin son: Edicin (creacin y modificacin) del cdigo fuente Proceso/ejecucin del programa Interpretacin directa (cdigo fuente) Compilacin (cdigo mquina) - montaje - ejecucin Compilacin (cdigo intermedio) - interpretacin

Otras funciones tambin son examinar (hojear) el cdigo fuente, analizar consistencia, calidad, etcetera; ejecutar en modo depuracin, ejecucin automtica de pruebas, control de versiones, generar documentacin, reformar cdigo y otras muchas ms. Un entorno de programacin puede estar concebido y organizado de maneras muy diferentes. A continuacin se mencionan algunas de ellas. En las primeras etapas de la informtica la preparacin de programas se realizaba mediante una cadena de operaciones tales como la que se muestra en la figura para un lenguaje procesado mediante compilador. Cada una de las herramientas deba invocarse manualmente por separado. En estas condiciones no puede hablarse propiamente de un entorno de programacin

El editor es un editor de texto simple El compilador traduce cada fichero de cdigo fuente a cdigo objeto El montador (linker / builder / loader) combina varios ficheros objeto para generar un fichero ejecutable 8

El depurador maneja informacin en trminos de lenguaje de mquina El entorno visual es un caso especial de entornos orientados a estructura. La

representacin externa del cdigo fuente no es en forma de texto, sino grfica. El editor permite ir construyendo el grafo que representa la estructura del cdigo. El programa construido de esta manera se ejecuta directamente mediante un intrprete, o bien se exporta como texto en un lenguaje formal para ser compilado o interpretado externamente. Un depurador (en ingls, debugger), es un programa usado para probar y depurar (eliminar los errores) de otros programas (el programa "objetivo"). El cdigo a ser examinado puede alternativamente estar corriendo en un simulador de conjunto de instrucciones (ISS), una tcnica que permite gran potencia en su capacidad de detenerse cuando son encontradas condiciones especficas pero ser tpicamente algo ms lento que ejecutando el cdigo directamente en el apropiado (o el mismo) procesador. Algunos depuradores ofrecen dos modos de operacin - la simulacin parcial o completa, para limitar este impacto.

Fundamentos de la Programacin Orientada a Objetos


Un paradigma de programacin provee (y determina) la visin y mtodos de un programador en la construccin de un programa o subprograma. Diferentes paradigmas resultan en diferentes estilos de programacin y en diferentes formas de pensar la solucin de problemas (con la solucin de mltiples problemas se construye una aplicacin). Los lenguajes de programacin son basados en uno o ms paradigmas Por ejemplo: Smalltalk y Java son lenguajes basados en el paradigma orientado a objetos. El lenguaje de programacin Scheme, en cambio, soporta slo programacin funcional. En cambio Python, soporta mltiples paradigmas.

Paradigmas de Programacin
Un paradigma de programacin es una propuesta tecnolgica que es adoptada por una comunidad de programadores cuyo ncleo central es incuestionable en cuanto a que unicamente trata de resolver uno o varios problemas claramente delimitados. Es un estilo de programacin empleado. La resolucin de estos problemas debe suponer consecuentemente un avance significativo en al menos un parmetro que afecte a la ingeniera de software. Tiene una estrecha relacin con la formalizacin de determinados lenguajes en su momento de definicin. Un paradigma de programacin est delimitado en el tiempo en cuanto a aceptacin y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente. El paradigma de programacin que actualmente es el ms usado es la orientacin a objetos. El ncleo central de este paradigma es la unin de datos y procesamiento en una entidad llamada "objeto", relacionable a su vez con otras entidades "objeto". Tradicionalmente datos y procesamiento se han separado en reas diferente del diseo y la implementacin de software. Esto provoc que grandes desarrollos tuvieran problemas de fiabilidad, mantenimiento, adaptacin a los cambios y escalabilidad. Con la orientacin a objetos y caractersticas como el encapsulado, polimorfismo o la herencia se permiti un avance significativo en el desarrollo de software a cualquier escala de produccin.

Programacin Imperativa Describe la programacin como una secuencia instrucciones o comandos que cambian el estado de un programa. El cdigo mquina en general est basado en el paradigma imperativo.

10

Su contrario es el paradigma declarativo. En este paradigma se incluye el paradigma procedimental (procedural) entre otros.

Programacin Funcional Este paradigma concibe a la computacin como la evaluacin de funciones matemticas y evita declarar y cambiar datos. En otras palabras, hace hincapi en la aplicacin de las funciones y composicin entre ellas, ms que en los cambios de estados y la ejecucin secuencial de comandos (como lo hace el paradigma procedimental). Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones.

Programacin Lgica La programacin lgica es un tipo de paradigmas de programacin dentro del paradigma de programacin declarativa. La programacin lgica gira en torno al concepto de predicado, o relacin entre elementos. El resto de los subparadigmas de programacin dentro de la programacin declarativa son: programacin funcional, programacin con restricciones, programas DSL (de dominio especfico) e hbridos. La programacin funcional se basa en el concepto de funcin (que no es ms que una evolucin de los predicados), de corte ms matemtico. Se basa en la definicin de reglas lgicas para luego, a travs de un motor de inferencias lgicas, responder preguntas planteadas al sistema y as resolver los problemas. Ej.: prolog.

Programacin Declarativa No se basa en el cmo se hace algo (cmo se logra un objetivo paso a paso), sino que describe (declara) cmo es algo. En otras palabras, se enfoca en describir las propiedades de la solucin buscada, dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solucin. Es ms complicado de implementar que el paradigma imperativo, tiene desventajas en la eficiencia, pero ventajas en la solucin de determinados problemas.

Programacin Orientada a Objetos Su principal ventaja es la reutilizacin de cdigos y su facilidad para pensar soluciones a determinados problemas. Est basado en la idea de encapsular estado y operaciones en objetos.

11

En general, la programacin se resuelve comunicando dichos objetos a travs de mensajes (programacin orientada a mensajes). Se puede incluir -aunque no formalmente- dentro de este paradigma, el paradigma basado en objetos, que adems posee herencia y subtipos entre objetos. Ej.: Simula, Smalltalk, C++, Java, Visual Basic .NET, etc.

Conceptos de Programacin Orientada a Objetos


El esquema tradicional de un programa, independientemente del lenguaje que se utilice, est compuesto por una secuencia de sentencias, ms o menos agrupadas en rutinas o funciones, que van operando sobre una informacin contenida en campos o variables. El problema de esta estructura estriba en que ni las sentencias tienen un control de las variables con las que trabajan, ni estas variables estn relacionadas en forma alguna con las sentencias que habrn de tratarlas. Cmo puede la POO ayudarnos? La filosofa de la POO (Object Oriented Programming, Programacin Orientada a Objetos) rompe con este esquema, dando lugar a una nueva idea, el objeto.

Objetos: Estados, Comportamiento e Identidad El objeto es una abstraccin en la que se unen sentencias y datos, de tal forma que a un objeto slo lo van a poder tratar los mtodos definidos para l, y estos mtodos estn preparados para trabajar especficamente con l. Este grado de compenetracin evita que un mtodo pueda tratar datos no apropiados, o bien que unos datos puedan ser tratados por un mtodo no adecuado, ya que la llamada a cualquier mtodo ha de ir siempre precedida del objeto sobre el que se quiere actuar, y ste sabe si ese mtodo se ha definido o no para l. C++ es un lenguaje que contiene estos y otros conceptos de POO. En terminologa POO, cuando se quiere ejecutar un mtodo (funcin) sobre un objeto, se utiliza un mensaje que se enva al objeto, de tal forma que el objeto llame a mtodo y ste sepa qu objeto lo ha llamado La POO permite realizar grandes programas mediante la unin de elementos ms simples, que pueden ser diseados y comprobados de manera independiente del programa que va a usarlos. Muchos de estos elementos podrn ser reutilizados en otros programas. A estas piezas, mdulos o "componentes", que interactan entre s cuando se ejecuta un programa, se les denomina objetos. Estos objetos contienen tanto datos como las funciones que actan sobre esos datos.

12

De ordinario, cada uno de estos objetos corresponde a algn elemento que debe utilizar el programa. Algunos de estos elementos representan entidades del mundo real (matrices, personas, cuentas de banco, elementos mecnicos o elctricos) y otros pueden ser componentes del ordenador (tanto de software como de hardware: otro programa, un fichero de disco, una impresora conectada en una puerta serie, una ventana abierta en la pantalla, ...). Tambin pueden ser estructuras de datos: colas, pilas, etc. Durante la ejecucin del programa, los objetos interactan pasndose mensajes y respuestas. Es fundamental darse cuenta de que un objeto no necesita conocer el funcionamiento interno de los dems objetos para poder interactuar con ellos (igual que el hombre no necesita conocer cmo funciona por dentro un televisor o un ordenador para poder utilizarlos), sino que le es suficiente con saber la forma en que debe enviarle sus mensajes y cmo va a recibir la respuesta (al hombre le puede ser suficiente con saber cmo funcionan el interruptor, el dial del volumen y los botones de cambio de canal para utilizar un televisor).

Mtodos Un mtodo es un bloque de cdigo que contiene una serie de instrucciones. Los programas hacen que las instrucciones se ejecuten mediante una llamada al mtodo y la especificacin de los argumentos de mtodo necesarios. En C#, cada instruccin se ejecuta en el contexto de un mtodo. El mtodo Main es el punto de entrada de cada aplicacin C# al que llama Common Language Runtime (CLR) cuando se inicia el programa.

Clases Sucede a menudo que hay que utilizar varios ejemplares anlogos de un determinado elemento u objeto (por ejemplo varias ventanas en la pantalla del PC, varios usuarios, varios clientes, varias cuentas corrientes de un banco, etc.). La definicin genrica de estos objetos anlogos se realizar mediante la clase. As, una clase contiene una completa y detallada descripcin de la informacin y las funciones que contendr cada objeto de esa clase. Las clases de C++ se pueden ver como una generalizacin de las estructuras. En C++ las clases son verdaderos tipos de datos definidos por el usuario y pueden ser utilizados de igual manera que los tipos de datos propios del C++, tales como int o float. Los objetos son a las clases como las variables a los tipos de variables. Un objeto tiene su propio conjunto de datos o variables miembro, aunque no de funciones, que aunque se aplican a un objeto concreto son propias de la clase a la que pertenece el objeto.

13

Herencia Permite la reutilizacin y la extensin del cdigo. Permite disear nuevas clases a partir de otras ya existentes, pudiendose adems extender sus mtodos (cambiar su semntica en la clase que hereda).

Encapsulamiento Este concepto permite tener un control de acceso selectivo tanto a los miembros como a los mtodos, de tal forma que desde fuera del objeto slo se pueda acceder a los mtodos e identificadores que permita el creador del objeto.

Poliformismo Permite tratar de forma genrica objetos de distintas clases, ahorrando as cdigo y proporcionando simplicidad. Por tanto, trata de forma genrica objetos de distintos tipos derivados de una misma clase de objetos

14

Bibliografa

Alba Torres, E., & Rubio del Ro, A. (s.f.). Programacin Orientada a Objetos con C++. Deitel, H. M., & Deitel, P. J. (1995). Como Programar en C/C++. Naucalpan de Jurez; Edo. de Mxico: Prentice Hall Hispanoamericana. Griffiths, D., & Griffiths, D. (2012). Head First C. Sebastopol, CA, USA: O'Reilly . Kernighan, B. W., & Ritchie, D. M. (s.f.). The C Programing Language (Second ed.). PRENTICE HALL . Stroustrup, B. (1997). The C++ Programming Language. Murray Hill, New Jersey: AddisonWesley. Universidad Tecnolgica Nacional. (2009). LaboratorioSistemas. Recuperado el 2013, de Universidad Tecnolgica Nacional. Facultad Regional Crdoba. Dept. Ing. en Sistemas de Informacin: http://labsys.frc.utn.edu.ar/ppr-2011/Unidad%20I%20%20POO%20Avanzada/Unidad%20I%20-%20POO%20Avanzada.pdf

15

S-ar putea să vă placă și