Академический Документы
Профессиональный Документы
Культура Документы
Nombre Miguel Angel Leonardo Galan Matricula 10-sisn-6-038 Seccin 913 Materia Lenguaje C++ Tema Primer trabajo de investigacin Profesor Kelvin Martinez Universidad Universidad Dominicana OyM
Historia
La programacin orientada a objetos surge en la historia como un intento para dominar la complejidad que, de forma innata, posee el software. www.youtube.com/watch?v=wbxJkCOd7H0 Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cmputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de naves, que fueron confundidas por la explosin combinatoria de cmo las diversas cualidades de diferentes naves podan afectar unas a las otras. La idea surgi al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. Fueron refinados ms tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versin fue escrita sobre Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos se podran crear y modificar "sobre la marcha" (entiempo de ejecucin) en lugar de tener un sistema basado en programas estticos. La programacin orientada a objetos se fue convirtiendo en el estilo de programacin dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++, una extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al auge de las Interfaces grficas de usuario, para las cuales la programacin orientada a
objetos est particularmente bien adaptada. En este caso, se habla tambin de programacin dirigida por eventos. Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo: Ada, Basic, Lisp, Pascal, entre otros. La adicin de esas caractersticas a los lenguajes que no fueron diseados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del cdigo. Para crear nuevos lenguajes basados en mtodos orientados a objetos, pero permitiendo algunas caractersticas imperativas de maneras "seguras". El Eiffelde Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparicin del internet, y a la implementacin de la mquina virtual de Java en la mayora de navegadores. En 1995 apareci JAVA, desarrollado por la empresa SUN Microsystems, que hereda conceptos de C++, pero los simplifica y evita la herencia mltiple. En su lugar se introduce el trmino de interfaz, y la herencia mltiple de interfaces. Obtiene una rpida aceptacin gracias a los applets, que son programas en java insertados en las pginas web dentro del cdigo html. Java introduce tambin la programacin concurrente y distribuida. Es multiplataforma. PHP 5 se ha modificado, soporta una orientacin completa a los objetos, cumpliendo todas las caractersticas propias de la orientacin a objetos.
Pilares o Caractersticas
Segn lo que he estado viendo en internet, las caractersticas de la POO tambin son nombradas pilares dela misma, y aqu se tocar ese tema.
La abstraccin:
Mucha gente considera que la abstraccin en si no es ms que una parte del proceso de la encapsulacin, y por tanto no la tienen como pilar independiente de la POO. La abstraccin es la capacidad de obtener y aislar toda la informacin y cualidades de un objeto que no nos parezcan relevantes, para poder encapsularlos. Para ello separamos "mentalmente" los objetos y nos centramos en su comportamiento fundamental. Gracias a ello, podemos representar las caractersticas esenciales de un objeto sin preocuparnos de las restantes. Pongamos el ejemplo de un objeto llamado gato. El gato tiene propiedades o caractersticas (nombre, color, peso, precio, edad...) y mtodos o comportamientos (andar, maullar, lamerse las pelotas...). Gracias a la abstraccin, otro objeto, por ejemplo el "objeto vendedor" puede manipular el "objeto gato" sin tener en cuenta algunas de sus propiedades y mtodos, ya que solo le interesan algunas, como el precio. La encapsulacin: La encapsulacin es la capacidad de ocultar los datos abstrados, aislarlos o protegerlos de quin no desees que tenga acceso a ellos; otro objeto o funcin por ejemplo. Cada objeto puede tener muchas cosas encapsuladas en su interior, propiedades, funciones o incluso otros objetos. Muchas veces no se necesita entender el funcionamiento interno de un objeto, sino tan solo sus funcionalidades: para que sirve o qu puede hacer. Por tanto un objeto puede ser cambiado por otro siempre que cumpla con la misma funcin. Veamos un ejemplo del mundo real. Imaginemos que tenemos un objeto: una tarjeta de sonido. No sabemos cul es el funcionamiento interno de la misma, sus propiedades se podra decir que estn encapsuladas dentro. Lo que s sabemos es que cumple con la funcin de proporcionar el sonido a nuestro ordenador. Podemos cambiar una tarjeta de sonido por otra, ya que cumplen la misma funcin, y no necesitamos saber nada ms, a no ser que queramos trabajar para creative. Para dejarlo an ms claro; el usuario no necesita saber cmo funciona internamente un coche, solo necesita saber que al pisar el acelerador (aplicar el mtodo) el coche anda.
Herencia y reutilizacin: La Herencia lo que nos dice es que puede crearse un objeto a partir de otro objeto ya existente. El nuevo objeto hereda todas las cualidades del objeto del que deriva y adems puede aadir nuevas funcionalidades o modificar las ya existentes. Imaginemos que tenemos un ordenador con sus planos y queremos fabricar otro ordenador. En vez de crear uno de cero, sera mucho ms sencillo basarnos en el ordenador que ya tenemos y aadirle o modificarle ciertas funcionalidades como podran ser: aumentar su capacidad, su velocidad de procesamiento, etc Este proceso adems de a un objeto puede aplicarse a una clase. A la clase que se crea a partir de otra clase se le conoce como subclase o clase derivada. Polimorfismo: El polimorfismo es la capacidad para que varias clases u objetos derivados de otros, reaccionen de manera diferente ante los mismos mtodos. El polimorfismo se puede aplicar tanto a objetos como a funciones, por lo que podemos hablar de objetos polimrficos y de funciones polimrficas. Por ejemplo, cuando apretamos el acelerador de un coche no va a responder igual el que posee un motor disel que el que tiene un motor de gasolina. En programacin orientada a objetos se denomina polimorfismo a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en funcin de los parmetros utilizados durante su invocacin. Un objeto polimrfico es una entidad que puede contener valores de diferentes tipos durante la ejecucin del programa. En la prctica esto quiere decir que un puntero a un tipo puede contener varios tipos diferentes, no solo el creado. De esta forma podemos tener un puntero a un objeto de la clase Trabajador, pero este puntero puede estar apuntando a un objeto subclase de la anterior como podra ser Mrketing, Ventas o Recepcionistas (todas ellas deberan ser subclase de Trabajador).El concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. As nacen los conceptos de funciones polimrficas y tipos polimrficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimrficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no est especificado. RELACIONES Las relaciones entre objetos son, precisamente, los enlaces que permiten a un objeto relacionarse con aquellos que forman parte dela misma organizacin. Las hay de dos tipos fundamentales: -Relaciones jerrquicas.
Son esenciales para la existencia misma de la aplicacin porque la construyen. Son bidireccionales, es decir, un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacin en la que ambos forman parte; asimismo, si un objeto es padre de otro, el segundo es hijo del primero (en la fig. 2, B es padre de D,E y F, es decir, D,E y F son hijos de B; en la fig. 3, los objetos B y C son padres de F, que a su vez es hijo de ambos).
Es mediante ellos y algunos otros elementos de programacin bsicos, que podemos definir correctamente un buen nmero de instrucciones o pasos para la solucin de un problema con la computadora, desde la entrada de informacin hasta la salida de los resultados.
OPERADORES
Los operadores bsicos son los siguientes: suma........................................................(+) resta.........................................................(-) negacin...................................................(-) residuo de divisin entera........................(mod) multiplicacin..........................................(*) divisin entera..........................................(\) [ en C se usa el carcter % ] divisin.....................................................(/) exponenciacin..........................................(^) [ en C se usa una funcin ]
La prioridad de los operadores para la evaluacin de las expresiones aritmticas, involucrando funciones del programa y de biblioteca, de izquierda a derecha es la siguiente: Funciones Exponenciacin Multiplicacin o divisin reales Divisin entera Mod Suma resta
DECLARACIONES.
Las instrucciones de un programa se dividen en ejecutables y no ejecutables. Estas ultimas (las declaraciones no ejecutables) proveen a la computadora la informacin necesaria sobre las caracterstica de las variables, especificaciones para formatos de salida, etc.
CONSTANTES
A su vez de los dos primeros grupos, las constantes pueden catalogarse en: De precisin sencilla De doble precisin
Definiciones: Constante entera. Cantidad que carece de punto y digitos decimales, solo admite signos (positivo y negativo) Constante real. Cantidad que incluye punto y digitos decimales, solo admite signos (positivo y negativo) Constante alfanumrica. Son valores que involucran no solamente digitos, sino tambien letras o caracteres y que en su conjunto tienen asignado un valor numrico para almacenarse en la memoria de la computadora. Comentario Las constantes reales permiten representar algunos nmeros racionales o cantidades con fraccin definida exactamente, en razn de las limitaciones de su memoria y de la forma en que se almacenan. Curiosamente una fraccin real se almacena en forma parecida a una notacin representada en forma exponencial, es decir, hay una parte entera y un exponente. La precisin simple de las cantidades reales garantiza por lo general seis dgitos decimales exactos, la doble precisin, el doble ms o menos. Las constantes enteras se utilizan en la programacin para definir contadores, ndices de arreglos, valores mximos en cuanto al nmero de elementos en arreglos, tamao de variables numricas, etc., y se prefiere hacerlo con variables debido a que sus valores se almacenan utilizando menos localidades de memoria y, por lo tanto un empleo ms eficiente de la memoria de la computadora.
VARIABLES
Una variable es un nombre que empieza con una letra y puede estar formada por varios caracteres ms (por lo general son vlidos dgitos, letras y el subguin _). Las variables estn clasificadas en: Enteras Reales Alfanumricas
Se emplean para almacenar valores definidos por constantes de tipo Entero Real Alfanumrico
Definiciones. Las variables enteras son aquellas cuyo nombre esta mencionado en una declaracin de este tipo o que se dan por definicin en algn lenguaje o porque incluyen algun caracter especfico que actua como identificador de tipo, como en el caso del lenguaje Basic, por ejemplo: I%,J%,K%,N%,M%,(el caracter % identifica a variables de tipo entero.) Estas variables solo almacenan valores enteros, por lo que si se les da valores con fraccin lo redondearan al entero ms prximo para almacenarlo. Algunos lenguajes no redondean y solo toman la parte entera; en lenguaje C se definen mediante declaraciones. Las variables reales son aquellas cuyo nombre se incluye en una declaracin de tipo (lenguaje C) o que son consideradas asi por omisin (lenguaje Basic), por ejemplo: A,B,C,X,Y,Z. En el caso del Basic se puede adicionar un caracter como identificador de tipo, por ejemplo: A!,B!,etc. La clasificacin en variables de tipo alfanumrico requiere de la presencia de una declaracin de tipo al principio del programa fuente (lenguaje C) o de un identificador como se muestra a continuacin para el caso de Basic: RESP$,X$,W$
FUNCIONES DE BIBLIOTECA
Una funcin de biblioteca es un subproceso pre programado, identificado con un nombre de una letra y de uno a cinco caracteres ms, seguido de argumento(s) entre parntesis que asocia a l o a los valores definidos por argumento(s), un valor nico en respuesta al llamado de la funcin. Todo lenguaje de programacin cuenta con una cantidad bsica de funciones conocidas como de biblioteca, que ayudan al programador en sus labores y evitan definirlas con subprocesos adicionales. Su nmero vara de lenguaje en lenguaje y de computadora a computadora, sin embargo, podemos decir que dicha lista bsica y sintaxis es prcticamente comn a todos los
lenguajes. Las funciones pueden emplearse en todas las expresiones aritmticas, rdenes de escritura y asignacin. Como ejemplo considrese las siguientes funciones: Funciones bsicas ms usuales: Valor absoluto de X, ABS(X) Logaritmo natural de X, LOG(X) Seno trigonomtrico de X (en radianes), SIN(X) Coseno trigonomtrico de X (en radianes), COS(X) FUNCIN eX, EXP(X) Raz cuadrada de X, SQR(X) Tangente de X (en radianes), TAN(X) Arco tangente de X, ATN(X)
Compiladores e Interpretes
Compilador, que analiza el programa fuente y lo traduce a otro equivalente escrito en otro
lenguaje (por ejemplo, en el lenguaje de la mquina). Su accin equivale a la de un traductor humano, que toma un libro y produce otro equivalente escrito en otra lengua.
Intrprete, que analiza el programa fuente y lo ejecuta directamente, sin generar ningn cdigo
equivalente. Su accin equivale a la de un intrprete humano, que traduce las frases que oye sobre la marcha, sin producir ningn escrito permanente. Intrpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios: Un intrprete facilita la bsqueda de errores, pues la ejecucin de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.). Adems, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecucin. Un compilador suele generar programas ms rpidos y eficientes, ya que el anlisis del lenguaje fuente se hace una sola vez, durante la generacin del programa equivalente. En cambio, un intrprete se ve obligado generalmente a analizar cada instruccin tantas veces como se ejecute (incluso miles o millones de veces). Un intrprete permite utilizar funciones y operadores ms potentes, como por ejemplo ejecutar cdigo contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un intrprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores.
*Sphinx C-- final : Sphinx C-- is a combination of C and 80x86 assembly language (DOS). *Watcom C/C++ v11.0c : Complete multi-platform development environment (DOS/Win/OS2) Cobol *DOS COBOL v0.001alpha or Win32 ver : Small COBOL interpreter (DOS/Win). MS COBOL V2.2 : Cobol is an old business oriented language that used to be extremely popular. Today it is only used by very few veteran programmers (DOS). (744kb) D *Digital Mars D Compliler : D was created as a C / C++ successor. It is still in Alpha stage of development (Win). Eiffel *iss-base 4 : Freeware version of a commercial compiler for the object-oriented Eiffel language (Win/Linux). *SmartEiffel : Fast, small and open source Eiffel compiler. Outputs to C / Java (Win/any ANSI C environment). Forth *Pygmy Forth 1.5 : Fast direct-threaded Forth (DOS). Fortran BC Fortran 77 v1.3b : Compiler, linker, module library and resident run-time w/debugger (DOS). (181kb) *F Compiler : You download via ftp compiler versions for many operating systems (Win/...) Lahey Fortran 77 v3.0 : The Lahey is a well known F77 compiler, although this is an early version (DOS). (382kb) Microsoft FORTRAN 5.1 : A good and well known compiler (DOS). (1.74MB) *Watcom FORTRAN v11.0c : FORTRAN 77 development environment (DOS/Win/OS2) Lisp / Scheme Apteryx Lisp v1.031 : A windows 3.x Lisp compiler (Win 3.x). (212kb) *newLISP 7.0.1 : newLISP is a compiler that has features of Common LISP and Scheme. It is still being developed (Win/Linux/Mac...). *PC-Lisp v3.00 : Lisp stands for LISt Programming. It is considered suitable for AI. This compiler is not Object-Oriented like other compilers (XLisp etc) and is a subset of Franz Lisp (DOS). *XLisp Plus v3.04 : This version supports most Common Lisp functions (DOS/Win). XScheme v0.17 : An object-oriented implementation of the Scheme programming language, that lacks a good editor. Scheme is similar to, but simpler than Common Lisp (DOS). (163kb) *Youtoo 0.93 : Yootoo is the latest EuLisp interpreter. EuLisp resembles to Lisp and it supports objects and parallel programming. Download from the ftp (Linux). Logo *DFP LOGO 1.2 : LOGO is a computer language designed to introduce young children to programming (DOS). *LSRHS Free LOGO : Another LOGO interpreter (DOS). Modula-2 / Modula-3
*Fitted Software Tools Modula-2 v3.1 : Modula-2 was designed by the creator of Pascal based on the experience and requests of PASCAL programmers (DOS). *M3forDOS 3.1 : A DOS port for SRC Modula 3 (DOS). *M3pc-Klangenfurt : Another DOS port for SRC Modula 3 (DOS). Pascal *Free Pascal V1.0.6 : A good (and free) Pascal compiler (DOS/Win/Linux...). *Pascal Pro V0.1 : Requires TASM/MASM or NASM,TLINK32 and WDOSX or similar to produce executables (DOS). *TMT Pascal Lite 3.90 : Fast 32 bit compiler. The DOS version is free to download. (DOS). Turbo PASCAL 5.5 : A basic Pascal compiler (DOS). *Virtual Pascal V2.1 : 32bit Pascal development environment (Win/OS2). Perl *ActivePerl 5.8 : Excellent Perl compiler. And you can't beat the price, since it is free (Win-LinuxSolaris). Perl 4.0 : PERL - Practical Extraction Report Language - a very important and powerful script programming language (DOS). (175kb) Prolog BinProlog v2.20 : Prolog is a higher level language that leaves more to the compiler and simplifies the design of complex programs. This is an old but fast C-emulated compiler (DOS). (119kb) Prolog-2 v2.35 : An MS-DOS version of prolog by Expert Systems (DOS). (149kb) *Strawberry Prolog 2.3 : This is an excellent (and easy to use) Windows Prolog compiler. Unfortunatelly, the free (Light) Edition does not create .EXE files (Win 9x). *Visual Prolog 6 : A complete PROLOG environment (Win). Python *ActivePython 2.2.1 : I don't know anything about Python, but judging from ActiveState's other products, the compiler should be very good (Win-Linux-Solaris). REXX *BREXX 1.3 : REXX is a procedural language that allows programs and algorithms to be written in a clear and structured way (DOS/Linux). (267kb) *Regina REXX : Regina REXX port for Win32 (Win). Smalltalk *Little Smalltalk v3 : Little Smalltalk is a subset of the Smalltalk object-oriented language (DOS). Tcl *ActiveTcl 8.4.1 : I don't know anything about Tcl, but judging from ActiveState's other products, the compiler should be very good (Win-Linux-Solaris). xBase *Harbour : Free xBase compiler (DOS/Win/Linux/OS2...). *MAX 2.0 : Free xBase compiler (Win/Linux).
Hablemos de C++
C++ es un lenguaje imperativo orientado a objetos derivado del C. En realidad un superconjunto de C, que naci para aadirle cualidades y caractersticas de las que careca. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programacin a bajo nivel, pero se la han aadido elementos que le permiten tambin un estilo de programacin con alto nivel de abstraccin. Respecto a su antecesor, se ha procurado mantener una exquisita compatibilidad hacia atrs por dos razones: poder reutilizar la enorme cantidad de cdigo C existente, y facilitar una transicin lo ms fluida posible a los programadores de C clsico, de forma que pudieran pasar sus programas a C++ e ir modificndolos (hacindolos ms "++") de forma gradual. De hecho, los primeros compiladores C++ lo que hacan en realidad era traducir (preprocesar) a C y compilar despus (las consecuencias se dejan sentir todava en el lenguaje. Por lo general puede compilarse un programa C bajo C++, pero no a la inversa si el programa utiliza alguna de las caractersticas especiales de C++. Algunas situaciones requieren especial cuidado. Por ejemplo, si se declara una funcin dos veces con diferente tipo de argumentos, el compilador C invoca un error de "Nombre duplicado", mientras que en C++ quizs sea interpretado como una sobrecarga de la primera funcin (que sea o no legal depende de otras circunstancias). Como se ha sealado, C++ no es un lenguaje orientado a objetos puro (en el sentido en que puede serlo Java por ejemplo), adems no naci como un ejercicio acadmico de diseo. Se trata simplemente del sucesor de un lenguaje de programacin hecho por programadores (de alto nivel) para programadores, lo que se traduce en un diseo pragmtico al que se le han ido aadiendo todos los elementos que la prctica aconsejaba como necesarios, con independencia de su belleza o purismo conceptual ("Perfection, in some language theoretical sense, is not an aim of C++. Utility is"). Estos condicionantes tienen su cara y su cruz; en ocasiones son motivo de ciertos "reproches" por parte de sus detractores, en otras, estas caractersticas son precisamente una cualidad. De hecho, en el diseo de la Librera Estndar C++ se ha usado ampliamente esta dualidad (ser mezcla de un lenguaje tradicional con elementos de POO), lo que ha permitido un modelo muy avanzado de programacin extraordinariamente flexible (programacin genrica). Aunque C++ introduce nuevas palabras clave y operadores para manejo de clases, algunas de sus extensiones tienen aplicacin fuera del contexto de programacin con objetos (fuera del mbito de las clases), de hecho, muchos aspectos de C++ que pueden ser usados independientemente de las clases.