8a. Exkurs .NET Inhalt: 8a.1 .NET Architektur 8a.2 Kooperation von Anwendungen über ADO -.NET 8a.3 Unterschiede gegenüber gewöhnlicher WIN32Programmierung Peter Sobe 1 8a.1 .NET Architektur Bislang wurden die C/C++ Programme nach dem Übersetzen und Linken direkt auf der Betriebssystemplattform ausgeführt (in der Übung war das Windows mit der Win32-Schnittstelle) .NET ist eine Framework mit einer Laufzeitumgebung zwischen den Anwendungsprogrammen und der Betriebssystemschnittstelle: CLR - Common Language Runtime Projekte innerhalb Visual Studio können auf die .NET Plattform kompiliert werden. Die Schnittstelle heißt CLI – Common Language Intermediate. Auf dieser Ebene wird die Zusammenarbeit mit Modulen gewährleistet, die in verschiedenen Programmiersprachen geschrieben wurden. Peter Sobe 2 8a.1 .NET Architektur Der Zugriff auf Datenbanken aus C/C++ Programmen wird durch das .NET Framework gewährleistet. Dabei werden Module des Datenbankmanagementsystems (z.B. MS-Access, SQL-Server) ausgeführt. .NET besitzt eine Klassenbibliothek mit einer Reihen von Funktionalitäten (vorgefertigte Klassen und Methoden), z.B. zum Zugriff auf das Netzwerk, für Ein und Ausgabe von XML-Dateien, Windows-FensterProgrammierung. Diese Funktionalitäten sind in s.g. Namespaces eingeteilt. CLR stellt eine erweiterte Technik für die dynamische Speicherverwaltung bereit: Garbage Collector … mehr dazu in Abschnitt 8a.3 Peter Sobe 3 .NET Architektur Microsoft VB Zum Vergleich SUN C++ C# Common Intermediate Language Common Language Runtime Betriebssystem Hardware Peter Sobe Java Java Bytecode Java vgl. SunRuntime Betriebbss. Hardware 4 8a.2 Kooperation von Anwendungen über ADO- .NET Durch .NET Programme (z.B. Visual C++, Visual Basic) können auch Microsoft-Office-Anwendungen automatisiert werden. Diese Technik basiert auf den s.g. Interop-Assemblys – das sind Sammlungen von Funktionen und Objekten, die gemeinsam durch verschiedene auf der .NET Plattform ausgeführten Anwendungen benutzt werden können. Installierte Assemblys sind gelistet unter C:\Windows\assembly Peter Sobe 5 Kooperation von Anwendungen über ADO- .NET Assemblys, verwaltet von der CLR Assembly Manifest Modul Metadaten Code Intermediate Language Typ (Klasse, Struktur) Eigenschaften Methoden Felder Peter Sobe 6 Kooperation von Anwendungen über ADO- .NET Zum Abrufen von Datenbank-Inhalten: ADO.NET stellt konsistenten Zugriff auf Datenquellen bereit, die durch OLE DB und ODBC verfügbar gemacht werden. C++-Anwendungen (oder C#, Visual Basic) können über ADO.NET eine Verbindung mit diesen Datenquellen herstellen und die enthaltenen Daten abrufen, verarbeiten und aktualisieren. Mit ADO können alle gebräuchlichen Datenbanken angesprochen werden, wie z. B. Microsoft Access, SQL-Server oder Oracle. Abkürzungen: ADO: Nachfolger von DAO (Data Access Objects), jetzt ADO.NET OLE DB: Object Linking and Embedding, Database ODBC: Open Database Connectivity (offenes Protokoll zur Datenbank Anbindung) Peter Sobe 7 Kooperation von Anwendungen über ADO- .NET Beispiel zum Abrufen von Datenbank-Inhalten: String^ conn="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\Temp\\db.accdb"; System::Data::OleDb::OleDbCommand ^command; System::Data::OleDb::OleDbDataReader ^reader; System::Data::OleDb::OleDbConnection^ connObj = gcnew System::Data::OleDb::OleDbConnection(conn); connObj->Open(); command = connObj->CreateCommand(); command->CommandText = "SELECT * FROM dbtabelle"; reader = command->ExecuteReader(); Console::WriteLine("Auflistung des Tabelleninhalts:"); while (reader->Read()) { Console::Write(reader->GetInt32(0)); Console::Write("\t"); Console::Write(reader->GetString(1)); Console::Write("\t"); Console::WriteLine(reader->GetString(2)); } reader->Close(); Peter Sobe 8 8a.3 Unterschiede gegenüber gewöhnlicher WIN32-Programmierung Verwalteter .NET Code kann den Garbage Collector benutzten. Traditionelles C++ Programm: Verwaltetes C++ Programm: meineKlasse *objekt; meineKlasse^ objekt; objekt = new meineKlasse(); … objekt = gcnew meineKlasse(); … // hier folgt Anwendungscode // hier folgt Anwendungscode delete objekt; // Die Freigabe des Objekts // erfolgt automatisch durch den // Garbage Collector, wenn der // Zeiger objekt neu beschrieben // wird, oder seine Gültigkeit verliert. Peter Sobe 9 Unterschiede gegenüber gewöhnlicher WIN32-Programmierung Benutzung der .NET –Klassenbibliothek .NET Anwendungen werden als CLR-Anwendung erstellt (anstatt WIN32) Varianten: CLR-Konsolenanwendung Leeres CLR-Projekt CLR-Windows Forms Anwendung Anstatt des Zeiger-Operators * wird ^ verwendet. Peter Sobe 10 Unterschiede gegenüber gewöhnlicher WIN32-Programmierung Benutzung der .NET –Klassenbibliothek Mit Visual Studio 2010 und .NET Framework 4.0 stehen mehr als 40.000 verschiedene Klassen bereit Ausgewählte Funktionalitäten nach Namespaces geordnet: System -- Basisfunktionen, wie z.B. Ein- und Ausgabe über die Konsole System::Collections -- Klassen für Datenstrukturen: Felder, Sortierte Felder, Hashtabellen, Bitfelder u. a. System::Windows::Forms – Klassen zur Steuerung der grafischen Benutzeroberfläche eines fensterorientieren Programms. System:: Drawing – Methoden zum Zeichnen in Fenster, Textdarstellung, 2D-Vektorgrafik, Anzeige von Bildern (gif, jpg u.ä.) System::Data – z.B. zum Zugriff auf Datenbanken System::IO – Zugriff auf das Dateisystem Peter Sobe 11 Unterschiede gegenüber gewöhnlicher WIN32-Programmierung Beispiel: Traditionelles C-Programm: #include <stdio.h> main() { char input[100]; printf(“Hallo!\n“); scanf(“%s“,input); return 0; } .NET C++ Programm: using namespace System; main(array <System:String^> ^args) { Console::WriteLine(L“Hallo!“); Console::ReadLine(); Traditionelles C++ Programm: #include <iostream> using namespace std; main() { char input[100]; cout << „Hallo!“ << “\n“; cin>>input; return 0; } Peter Sobe return 0; } 12