C

C / C++ / C# Lenguaje de Programacion
El lenguaje de programacion C es el principal lenguaje de programacion en todos los sistemas operativos y plataformas. El lenguaje C original, fue desarrollado por Kernighan y Ritchie en 1972, en la ATT. El estandar de C original estaba el libro escrito en 1978 por estos dos autores. ( B. Kernighan and D. Ritchie, The C Programming Language, Prenctice-Hall, 1978.)
EL ANSI C Fue creado con el objetivo con el objetivo estandarizar un lenguaje uniforme a partir del C original. Este fue estandarizado por el "comité para el estándar ANSI C" en 1983
El lenguaje C++ se desarrollo a partir de 1980 y su autor fue B. Stroustrup, también de la ATT. El C++ era inicialmente era una extensión del lenguaje C que fue llamada "C with classes". A partir de 1983 este lenguaje empezó a ser llamado C++ y utilizado fuera de la ATT. En nombre C++ se refiere al carácter del operador incremento de C (++). Este lenguaje tuvo gran difusión y exito en el mundo de los programadores y la ATT comenzó a estandarizarlo internamente en 1987.
En 1989 se formó un comité ANSI C++ que fue seguido algún tiempo después por un comité ISO, quienes se encargaron de estandarizarlo a nivel americano e internacional.
Actualmente el C++ es un lenguaje muy versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones y hasta es el preferido para compilar la mayor parte de sistemas operativos como Linux y Windows.
El C++ tiene las mismas las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original.
JAVA - La evolución de C++ ha continuado con la aparición de Java, un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet como la tecnologia Microsoft C##. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++. En estas Notas se van a presentar los fundamentos del lenguaje C++ tradicional a partir del lenguaje C. Su descripción se va a realizar en dos partes: una inicial en la que se contemplan las modificaciones y una posterior con los añadidos.
El C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con él. Como lenguaje orientado a objetos se basa en una filosofía completamente diferente, que exige del programador un completo cambio de mentalidad. Las características propias de la Programación Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que sí que cambian radicalmente su naturaleza.
Cualquier programador debe diferenciar a simple vista la diferencia entre un archivo C y un C++. :os archivos o ficheros fuente de C++ tienen la extensión *.cpp (c plus plus) en lugar de *.c
Una de las ventajas del ANSI y el C++ es permiten incluir comentarios en el codigo con dos barras consecutivas (//) hasta el fin de la línea 2. Mientras que anteriormente habia que marcar siempre el final con /* */.
Tambien se incluyen variables tipo enum. Ejemplo: enum ( CERO, PRIMERO, SEGUNDO, TERCERO } es igual que declarar CERO=0, PRIMERO=1, SEGUNDO=2, TERCERO=3
El C++ incluye la deficion de variables multiples tip estructuras con "struct". Ejemplo: struct persona { int cedula; char[100] nombre; char[100] apellido1; char[100] direccion; }
Otras ventajas introducidas por el C++ son: scope de variables automatic (default) y static. Para mejorar la opcion #define se incluye una especificacion de variables constantes tipo "const" que estan sometidas a las mismas reglas de visibilidad que otras variables (como static). - Tambien se introducen conversiones explicitas de tipo como int x = (int) (y/z); - Asimismo se incluyen las funcionen inline que son sustituidas por el compilador. Ejemplo: inline int copiar(int *x, int *y) { *x = *y; } Tambien introduce punteros tipo void.
Operadores new y delete para gestion dinamica de mejoria.
C / C++ / C# - LINKS y Sitios con informacion
C / C++ Tutorials / Introductory Material
How to Compile a Visual C++ Program
Visual C++ Help Page
Print Console Output in Microsoft Visual C++ 6.0
Getting Started with Matlab (The MathWorks)
Creating a Simple MFC Program (MFC)
Introduction to DCOM
MicroSoft Visual C++ Deficiencies
Intro to MS Visual C++ 6.0
Visual C++ Tutorial (Recommended)
Using Microsoft Visual C++ in the Classroom
Visual C++ Tutorial - FunctionX (Cool Stuff)
A Sharper Look for Visual C++
MBeginner's Page for Visual C++ Developers
Visual C++ Primer/Debugger
Getting Started with Visual C++.NET
Visual C++ Debug Tutorial
Visual C++ Tutorial
Visual C++ - Hello World Program
Continuous Integration with Visual C++ and COM
MFC Professional's Site
Visual C++ 5.0 Standard C++ Library
STL for eMbedded Visual C++ - Windows CE
Sam's Visual C++ Programmer Stuff
Codeguru: the best site for Visual C++
Microsoft's MFC Library Development Guidelines
Visual C++ Online Books
VC++ in 21 Days
Teach Yourself Visual C++® 5 in 24 Hours
Visual C++ 4 Unleashed (Must Visit)
Database Developer's Guide with Visual C++ 4
21 Days to Database Programming using Visual C++
ActiveX Programming

Visual C++ tips, tricks, FAQs

MS Visual C++ FAQ
Visual Studio / Visual C++ FAQ
Visual C++ Tips (Must Visit)
FAQ by Tek-Tip
Visual C++ Barcode FAQ and Tutorial
Visual C++ FAQ
Microsoft Visual C++ Tips and Tricks
Few Advanced VC++ Tips
Flipcode Tips and Tricks (MUST MUST MUST)
VC Tips
VC++ Tips Archive
Visual C++ Debuging
Microsoft Visual C++ Debugger
Debugging VC++
Tutorial - Debugging VC++
Introduction to Visual C++ Debugging
Using the Visual C++ Debugger
FIX: Visual C++ Debugger Crashes on Breakpoint
Debugger Tips
Microsoft Visual C++ Debugger QuickStart
Visual C++ Guide - Debugging
Debugging: when your applications don't work
Intro to MS Visual C++ Debugging (PDF)
The Visual C++ debugger (Must Visit)

Introducción a la Programación Orientada a Objetos (OOP) La filosofia de Programación Orientada a Objetos (POO) consiste en realizar grandes programas mediante la unión de objetos o elementos más simples, que pueden ser diseñados y comprobados de manera independiente del programa que va a usarlos.

Muchos de estos objetos se convierten en modulos que podrán ser reutilizados en otros programas. Estos objetos o componentes contienen datos y tambien las funciones que actúan sobre esos datos.

Durante la ejecución del programa, los objetos interactúan pasándose mensajes y respuestas. Es fundamental darse cuenta de que un objeto no necesita conocer el funcionamiento interno de los demás objetos para poder interactuar con ellos (igual que el hombre no necesita conocer cómo 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 cómo va a recibir la respuesta (al hombre le puede ser suficiente con saber cómo funcionan el interruptor, el dial del volumen y los botones de cambio de canal para utilizar un televisor).

La definición genérica de estos objetos análogos se realizar mediante la clase. A veces se llaman también instances o data objects. Las clases de C++ son como una generalización de las estructuras de C.

Una clase contiene una completa y detallada descripción de la información y las funciones que contendrá cada objeto de esa clase. Ejemplo class Persona { long cedula; char nombre[100]; char apellido[100]; int consultar(long); };

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.


Programacion Orientada a Objetos:

El ANSI C es un lenguaje algorítmico (o procedural, en inglés) porque las funciones son algo relativamente independiente de las variables, y constituyen el centro del lenguaje. Cualquier función se puede comunicar con las demás a través de variables globales, variables de retorno y argumentos pasados por valor o por referencia. Sin embargo esta facilidad para comunicarse con otras funciones requiere cuidado y puede causar efectos laterales no deseados.

En un Lenguaje Orientado a Objetos tal como el C++, el centro del lenguaje no son las funciones sino los datos, o más bien los objetos. Estos objetos pueden contener varios datos y funciones que permiten manipularlos y trabajar sobre ellos.
Se introduce el concepto de encapsulación, ocultamiento o abstracción de datos para proteger a las variables de modificaciones no deseadas.
Los miembros de una clase se pueden dividir en públicos y privados. Los miembros públicos son aquellos a los que se puede acceder libremente desde fuera de la clase. Los miembros privados, por el contrario, solamente pueden ser accedidos por los métodos de la propia clase. De ordinario una clase ofrece un conjunto de funciones públicas a través de las cuales se puede actuar sobre los datos, que serán privados. Estas funciones o métodos públicos constituyen la interface de la clase. De esta forma se garantiza que se hace buen uso de los objetos, manteniendo la coherencia de la información. Esto sería imposible si se accediera libre e independientemente a cada variable miembro. Al usuario le es suficiente con saber cómo comunicarse con un objeto, pero no tiene por qué conocer el funcionamiento interno del mismo. En C++ los métodos de una clase pueden ser funciones u operadores. Tambien permite funciones sobrecargadas, que son funciones con el mismo nombre pero con distintos argumentos y definición. Otra posibilidad es la de que objetos de distintas clases respondan de manera análoga al aplicarles funciones con idéntico nombre y argumentos. Esta posibilidad da origen a las funciones virtuales y al polimorfismo. La librería de C++ proporciona algunas herramientas para la entrada y salida de datos que la hacen más versátil, y más complicada en ocasiones, que la de C. En C++ las entradas son leídas desde streams y las salidas son escritas en streams. La palabra stream quiere decir algo así como canal, flujo o corriente. C++ hace que tanto la entrada como la salida de datos se vayan dirigiendo a unos flujos de entrada y/o de salida, sumándose a lo que ya se arrastra en esa dirección. A veces se comparan los streams con una cinta transportadora que introduce o saca datos del programa. Al incluir la librería se añaden al programa varios streams estándar. Los más utilizados son cin, que se utiliza para la entrada de datos (habitualmente desde teclado), cout, que se utiliza para la pantalla, y cerr para los mensajes de error.
Los operadores new y delete pueden ser aplicados tanto a variables de los tipos predefinidos (int, float, double, …) como a objetos de las clases definidas por el usuario. Su principal aplicación está en la creación de variables con reserva dinámica de memoria, sustituyendo a las funciones calloc(), malloc() y free() que se utilizan en C.
Constructores y destructores Ya se ha apuntado que C++ no permite crear objetos sin dar un valor inicial apropiado a todas sus variables miembro. Esto se hace por medio de unas funciones llamadas constructores, que se llaman automáticamente siempre que se crea un objeto de una clase. Los constructores se caracterizan porque se declaran y definen sin valor de retorno, ni siquiera void. Utilizando las capacidades de sobrecarga de funciones de C++, para una clase se pueden definir varios constructores. El uso del constructor es tan importante que, en el caso de que el programador no defina ningún constructor para una clase, el compilador de C++ proporciona un constructor de oficio (también llamado a veces por defecto, aunque como más tarde se verá que esta terminología puede resultar confusa).
Clases y funciones friend: Una función friend de una clase es una función que no pertenece a la clase, pero que tiene permiso para acceder a sus variables y funciones miembro privadas por medio de los operadores punto (.) y flecha (->), sin tener que recurrir a las funciones
El puntero this es una variable predefinida para todas las funciones u operadores miembro de una clase. Este puntero contiene la dirección del objeto concreto de la clase al que se está aplicando la función o el operador miembro. Se puede decir que *this es un alias del objeto correspondiente. Conviene tener en cuenta que cuando una función miembro se aplica a un objeto de su clase (su argumento implícito), accede directamente a las variables miembro (sin utilizar el operador punto o flecha), pero no tiene forma de referirse al objeto como tal, pues no le ha sido pasado explícitamente como argumento.
Sobrecarga de operadores: Los operadores de C++, al igual que las funciones, pueden ser sobrecargados (overloaded). Este es uno de los aspectos más característicos de este lenguaje. La sobrecarga de operadores quiere decir que se pueden redefinir algunos de los operadores existentes en C++ para que actúen de una determinada manera, definida por el programador, con los objetos de una clase determinada. Esto puede ser muy útil por ejemplo, para definir operaciones matemáticas con elementos tales como vectores y matrices.
HERENCIA La herencia, es una característica de la programación orientada a objetos que permite definir una clase modificando una o más clases ya existentes. Estas modificaciones permiten agregar nuevos miembros (variables o funciones), a la clase que se está definiendo, aunque también se puede redefinir variables o funciones miembro ya existentes. La clase de la que se parte en este proceso recibe el nombre de clase base, y la nueva clase que se obtiene se denomina clase derivada. Ésta a su vez puede ser clase base en un nuevo proceso de derivación, iniciando de esta manera una jerarquía de clases. De ordinario las clases base suelen ser más generales que las clases derivadas. Esto es así porque a las clases derivadas se les suelen ir añadiendo características. El mecanismo de herencia ofrece la ventaja de reutilizar código sin tener que escribirlo de nuevo. Esto es posible porque todas las clases derivadas pueden utilizar el código de la clase base sin tener que volver a definirlo en cada una de ellas.
Las clases base abstractas (ABC, Abstract Base Class) tienen función es la de agrupar miembros comunes de otras clases que se derivarán de ellas. A este tipo de clases base, de las que no se declara ningún objeto. Por ejemplo, se puede definir la clase vehiculo para después derivar de ella auto, bicicleta, autobus, etc., pero todos los objetos que se declaren pertenecerán a alguna de estas últimas clases; no habrá vehículos que sean sólo vehículos.
VARIABLES Y FUNCIONES MIEMBRO PROTECTED Uno de los problemas que aparece con la herencia es el del control del acceso a los datos. ¿Puede una función de una clase derivada acceder a los datos privados de su clase base? En principio una clase no puede acceder a los datos privados de otra, pero podría ser muy conveniente que una clase derivada accediera a todos los datos de su clase base. Para hacer posible esto, existe el tipo de dato protected.
POLIMORFISMO Por polimorfismo la capacidad de llamar a funciones distintas con un mismo nombre. Estas funciones pueden actuar sobre objetos distintos dentro de una jerarquía de clases, sin tener que especificar el tipo exacto de los objetos. El polimorfismo hace posible que un usuario pueda añadir nuevas clases a una jerarquía sin modificar o recompilar el código original. Esto quiere decir que si desea añadir una nueva clase derivada es suficiente con establecer la clase de la que deriva, definir sus nuevas variables y funciones miembro, y compilar esta parte del código, ensamblándolo después con lo que ya estaba compilado previamente. Es necesario comentar que las funciones virtuales son algo menos eficientes que las funciones normales. A continuación se explica, sin entrar en gran detalle, el funcionamiento de las funciones virtuales. Cada clase que utiliza funciones virtuales tiene un vector de punteros, uno por cada función virtual, llamado v-table. Cada uno de los punteros contenidos en ese vector apunta a la función virtual apropiada para esa clase, que será, habitualmente, la función virtual definida en la propia clase. En el caso de que en esa clase no esté definida la función virtual en cuestión, el puntero de v-table apuntará a la función virtual de su clase base más próxima en la jerarquía, que tenga una definición propia de la función virtual. Esto quiere decir que buscará primero en la propia clase, luego en la clase anterior en el orden jerárquico y se irá subiendo en ese orden hasta dar con una clase que tenga definida la función buscada. A las funciones incluidas en varios niveles de una jerarquía de clases con el mismo nombre pero con distinta definición, se les denomina funciones virtuales.
tecnico c Tecnologia 2016