7 Erweiterung von Gradle
|
|
|
- Jutta Kalb
- vor 8 Jahren
- Abrufe
Transkript
1 D3kjd3Di38lk323nnm 187 Gradle bietet uns sehr viele Tasks und Plug-ins für die verschiedensten Funktionen. Außerdem gibt es eine große Anzahl von Plug-ins von Dritten, die weitere Funktionen anbieten. Trotzdem ist es auch für uns interessant zu verstehen, wie diese Erweiterungen geschrieben werden. Im einfachsten Fall erlaubt uns das einen weiteren Einblick in die Funktionalität von Erweiterungen, in vielen Fällen erlaubt uns das Verständnis die bessere Strukturierung unserer eigenen Builds durch Auslagerung von Funktionalität aus dem eigentlichen Build-Skript. Dieses Kapitel ist zwar dasjenige mit dem komplexesten Inhalt, aber die durch Gradle angebotenen Möglichkeiten sind so einfach zu verstehen, dass es völlig unproblematisch ist, eigene Erweiterungen zu schreiben. 7.1 Arten von Erweiterungen Gradle bietet als eine zentrale Abstraktion den Task, der als klaren Zweck die Beschreibung eines Schrittes in unserem Build-Prozess hat. Gradle bietet uns von Haus aus eine Menge verschiedener Typen an. Bisher haben wir diese Tasks verwendet und für unsere eigenen Zwecke konfiguriert. Ein Task ist aber nichts anderes als eine von der Klasse DefaultTask abgeleitete Java- oder Groovy-Klasse, die wir sehr einfach auch selbst schreiben können. Dies bietet sich an, sobald wir Tasks in unserem Projekt mehrere Male auf die gleiche oder ähnliche Art konfigurieren beziehungsweise mit eigener Funktionalität erweitern. Die zweite Art der Erweiterung, das Plug-in, hat einen völlig anderen Zweck. Im Gegensatz zum Task spielt ein Plug-in keine Rolle im Build-Prozess, sondern erweitert und modifiziert diesen in einer plugin-spezifischen Form. Hierzu kann auch die Einführung neuer Domänenobjekte gehören. Ein Beispiel, das wir schon kennengelernt haben,
2 188 ist das SourceSet, das durch das Java-Plug-in eingeführt wird (genauer das Java-Base-Plug-in). Auch ein Plug-in ist eine Java- oder Groovy-Klasse, die eine Schnittstelle Plugin<Project> implementiert. Diese Schnittstelle enthält eine Methode apply(), und dies ist die Methode, die aufgerufen wird, wenn wir ein Plug-in in unserem Build-Skript laden. 7.2 Orte für Erweiterungen Das Build-Skript Der erste Ort, an dem wir Erweiterungen platzieren können, ist im Build-Skript selbst. Dies ist der offensichtliche Ort für erste Experimente. Der Vorteil ist, dass Gradle innerhalb des Build-Skripts sämtliche API-Klassen zur Verfügung stellt, die wir in anderen Fällen von Hand importieren müssen. Der offensichtliche Nachteil ist, dass die Erweiterungen nur innerhalb des Build-Skripts zur Verfügung stehen. Es gibt aber ein großes Problem mit diesem Ansatz, das vielleicht im ersten Moment gar nicht so offensichtlich ist. Das Build-Skript soll unseren Build möglichst klar und leicht lesbar beschreiben, ein Aspekt, der in Gradle sehr großen Einfluss auf das Design hat. Gradle folgt sehr stark einem der Grundprinzipien vernünftigen Designs, der separation of concerns (Trennung der Anforderungen). Diese fordert nichts anderes, als dass man keine verschiedenen Anforderungen oder Aufgaben innerhalb des Quelltextes vermischt. Die erste Erwähnung dieses Prinzips finden Sie in [Dijkstra 1983]. Wenn wir nun den Quelltext unserer Erweiterungen im normalen Build-Skript belassen, dann haben wir das genaue Gegenteil dessen, was wir haben wollen, ein Build-Skript, das voll von Quelltexten ist, die erst verstanden sein müssen, damit klar ist, was der tatsächliche Zweck ist Externe Skripte Die zweite Möglichkeit der Strukturierung ist das Einbinden externer Skripte, das wir im Rahmen der Einbindung des Emma-Plug-ins bereits kennengelernt haben. Mit apply from: 'datei.gradle' können wir die Datei datei.gradle direkt einbinden. Der Vorteil ist, dass wir die gleichen Rahmenbedingun-
3 7.2 Orte für Erweiterungen 189 gen wie im Build-Skript selbst vorfinden. Da wir das Skript von beliebigen Build-Skripten aus einbinden können, steht uns die Funktionalität auch über die Grenzen des eigentlichen Build-Skripts zur Verfügung. Es gibt auch hier mehrere Nachteile: Wir müssen den Ort, an dem die Datei zur Verfügung gestellt wird, kennen und angeben. Gradle führt hier kein Caching der Dateien durch. Während dies im lokalen Dateisystem nicht relevant ist, stellt dies bei entfernten Quellen, die zum Beispiel durch einen URL referenziert werden, ein Problem dar. Neben der deutlich längeren Zeit für einen solchen Zugriff machen wir uns damit abhängig von der Verfügbarkeit des Netzes und des Servers, auf dem das Skript liegt. Der größte Nachteil ist aber, dass externe Skripte nicht versioniert sind. Sie sind also davon abhängig, dass ein Skript, das Sie verwenden, auch in zwei Jahren noch die gleiche Semantik hat und mit der dann von Ihnen verwendeten Gradle-Version funktioniert. Diese Nachteile führen dazu, dass der Build um ein Vielfaches fragiler ist und das Scheitern des Builds deutlich schwerer nachvollziehbar sein kann. Damit sollte auch diese Variante nicht dauerhaft verwendet werden, sondern nur während der Entwicklung der Erweiterungen. Sollten Sie die externe Datei unter Ihrer Kontrolle haben, dann bietet sich die nächste Variante zur klareren Strukturierung an Das Verzeichnis buildsrc Bei jedem Start prüft Gradle, ob ein Verzeichnis buildsrc existiert (in Multiprojekt-Builds im Verzeichnis des Wurzelverzeichnisses). Wenn dieses Verzeichnis existiert, dann behandelt Gradle dies als normales Projektverzeichnis für ein Groovy-Projekt (mit src/main/- und src/ test-verzeichnissen), übersetzt und testet alle Quellen und stellt diese dem Build-Skript zur Verfügung. Wir können in diesem Verzeichnis ein normales Build-Skript build.gradle verwenden. Dies ist insbesondere dann notwendig, wenn unsere Erweiterung ihrerseits Abhängigkeiten von anderen Bibliotheken besitzt. Falls wir kein Build-Skript build.gradle zur Verfügung stellen, verwendet Gradle das folgende Build-Skript: apply plugin: 'groovy' dependencies { compile gradleapi() groovy localgroovy() Listing 7 1 Das Build-Skript für das Verzeichnis buildsrc
4 190 Interessant sind hierbei die beiden Abhängigkeiten gradleapi() und localgroovy(), die uns von Gradle zur Verfügung gestellt werden und die wir auch verwenden können, wenn wir ein eigenes Build-Skript für das Verzeichnis buildsrc schreiben. Die Methode gradleapi() stellt die API-Klassen aus der lokalen Gradle-Installation zur Verfügung, local- Groovy() die Groovy-Version von Gradle. Anders als bei Erweiterungen im Build-Skript müssen wir in den hier abgelegten Quelltexten die von uns verwendeten API-Klassen selbst importieren. Auch wenn dies folgerichtig ist, sind die durch die fehlenden Importe entstehenden Fehler bei eigenen Erweiterungen, die wir aus unserem Build-Skript in dies Verzeichnis bewegen, ein typisches Problem, das allerdings leicht zu beheben ist. Ein Nachteil ist auch hier die fehlende Versionierung. Dieser Nachteil wird allerdings dadurch relativiert, dass wir die volle Kontrolle über die Quellen haben. Trotzdem ist die nächste Variante mit einem Minimum an zusätzlichem Aufwand deutlich vorteilhafter Eigene Projekte Von den Erweiterungen im Verzeichnis buildsrc ist es nur noch ein kleiner Schritt bis zum vollständigen eigenen Projekt. Tatsächlich ist es, wenn Sie das in Listing 7 1 angegebene Build-Skript verwenden, nicht mehr als das Kopieren des Verzeichnisses in ein eigenes Projektverzeichnis. Als einzigen zusätzlichen Schritt müssen Sie noch das Hochladen des erzeugten Archivs in ein Repository oder Verzeichnis konfigurieren, so dass Sie auf die Erweiterung in Folge von beliebigen Build- Skripten aus zugreifen können Wahl der Variante In Ihrem Build-Skript sollten Sie Quelltexte für Erweiterungen nur zur Zeit der Entwicklung haben, danach sollten Sie sie auf jeden Fall auslagern. Hierbei ist der erste Schritt eine externe Datei, in die Sie den Quelltext verschieben. Wann immer Sie können, sollten Sie Ihre Erweiterungen in eigene Projekte auslagern oder, wenn Ihnen das zu aufwendig ist, dann zumindest in das Unterverzeichnis buildsrc. Da der Schritt von diesem Verzeichnis zu einem eigenen Projekt sehr klein ist und die damit verbundenen Vorteile der Versionierung über das Repository sehr hoch sind, sollten Sie eigentlich immer zu dieser Variante tendieren.
5 7.3 Eigene Tasks Eigene Tasks In vielen Fällen reichen uns die Task-Typen aus, die Gradle und die verschiedenen Plug-ins zur Verfügung stellen. Es gibt aber Situationen, in denen wir in mehreren Tasks die immer gleichen Konfigurationen durchführen. In diesen Fällen ist es sehr einfach, einen eigenen Task- Typ zu definieren. Hierzu deklarieren wir eine Klasse, die von DefaultTask oder einem anderen Task abgeleitet ist (in normaler Groovy-Manier). In diesem definieren wir beliebig Eigenschaften und Methoden, die in den abgeleiteten Klassen verwendet werden können Annotationen für unsere eigenen Task-Klassen Zusätzlich stellt Gradle noch einige Annotationen zur Verfügung, um Eigenschaften und Methoden des Tasks zu markieren. Diese dienen dazu, Gradle mitzuteilen, dass die markierten Eigenschaften und Methoden Informationen oder Funktionalität enthalten, die für Gradle relevant ist. Gradle verwendet hierbei die Groovy-eigene Sicht auf Eigenschaften, die entweder durch Attribute oder aber durch Getter- und Setter-Methoden definiert werden können. Die angebotenen Annotationen werden hauptsächlich für Eigenschaften zur Referenzierung von Eingabe- und Ausgabedateien verwendet, entweder in Form von normalen Java-File-Objekten oder in Form von FileCollection-Objekten. Annotation @OutputFiles Bedeutung Die markierte Eigenschaft enthält eine Eingabedatei als File-Objekt. Die markierte Eigenschaft enthält eine FileCollection von Eingabedateien. Die markierte Eigenschaft enthält ein Verzeichnis von Eingabedateien als File-Objekt. Die markierte Eigenschaft enthält eine Ausgabedatei als File-Objekt. Die markierte Eigenschaft enthält eine FileCollection von Ausgabedateien. Die markierte Eigenschaft enthält ein Verzeichnis von Ausgabedateien als File-Objekt. Die markierte Eigenschaft enthält eine FileCollection von Ausgabeverzeichnissen. Tab. 7 1 Annotationen für eigene Tasks
6 192 @TaskAction Bedeutung Wenn eine mit dieser Annotation markierte Eigenschaft den Wert ändert, bewirkt dies, dass Gradle den Task nicht mehr als aktuell (UP-TO-DATE) ansieht. Diese Annotation markiert ein normales Java-Objekt (Java Bean), dessen Eigenschaften die in dieser Tabelle aufgeführten Annotationen haben. Gradle wertet die Annotation und die im Java-Objekt enthaltene Information aus. Wenn wir die Annotationen dieser Tabelle verwenden, dann erwartet Gradle verpflichtend Werte in den annotierten Eigenschaften. Wenn wir diese Annotation zusätzlich benutzen, dann betrachtet Gradle die Werte als optional und meldet keinen Fehler, wenn die entsprechende Eigenschaft keinen Wert enthält. Diese Annotation verwenden wir zusammen mit den Annotationen für die Markierung von Eingabedateien. Wenn eine mit dieser Annotation markierte Eigenschaft eine leere FileCollection oder ein leeres Verzeichnis enthält, wird der Task nicht ausgeführt. Eine mit dieser Annotation markierte Methode wird als Task-Action an die Liste der auszuführenden Aktionen angehängt Ein einfaches Beispiel Ein Beispiel demonstriert, wie wenig Aufwand die Erzeugung eines eigenen Task-Typs ist. Listing 7 2 Erzeugung eigener Task-Typen class HalloTask extends DefaultTask { def adressat = 'nobody' def setadressat(neueradressat) { adressat = neueradressat if(adressat == "Welt") adressat = def helloadressat() { println "Hallo $adressat" task hallowelt ( type : HalloTask) { adressat "Welt" Wir erzeugen zunächst eine neue Groovy-Klasse, die von dem Typ DefaultTask abgeleitet ist. Wir geben ihr eine Eigenschaft adressat und
7 7.3 Eigene Tasks 193 eine Methode setadressat(). Wenn wir die Eigenschaft adressat in Folge setzen, wird diese Methode aufgerufen anstelle einer direkten Zuweisung. In der Methode setzen wir den übergebenen Wert, und nur wenn dieser den Wert Welt hat, dann ersetzen wir ihn durch den Wert Universum. Dann definieren wir eine zweite Methode helloadressat(), die wir als TaskAction annotieren. Damit übernimmt Gradle diese Methode automatisch in die Liste der Aktionen, die jeder abgeleitete Task ausführt. Zum Schluss deklarieren wir einen Task hallowelt, der vom Typ HalloTask abgeleitet ist. In der zugehörigen Konfigurations-Closure setzen wir den Wert der Eigenschaft adressat auf Welt. Dies führt zum Aufruf der setadressat()-methode und damit der Ersetzung der Zeichenkette. Die Ausführung des Tasks hallowelt führt die annotierte Aktion aus und gibt die entsprechende Zeichenkette aus. > gradle -q hallowelt Hallo Universum > Listing 7 3 Ergebnis des Build-Skripts Ein komplettes Beispiel Im Rahmen der Erzeugung eigener Ant-Tasks haben wir bereits ein etwas komplexeres Beispiel eines Tasks kennengelernt, um Python- Skripte zu übersetzen (siehe Listing 7 4). Hier verwenden wir auch die Annotationen zur Kennzeichnung der Eingabe- und Ausgabedateien, um Gradle bei der Bestimmung der Aktualität unseres Tasks zu unterstützen. configurations { jython repositories { mavencentral() Listing 7 4 Der Übersetzung mit jython als eigene Task-Klasse dependencies { jython group: 'org.python', name: 'jython', version: '2.5.+' class JythonC extends File sourcedirectory = File outputdirectory = project.file("$project.builddir/classes/main")
8 Configuration jythonclasspath = public void compile(){ ant.taskdef (name: 'jythonc', classname: 'org.python.util.jycompileanttask', classpath: jythonclasspath.aspath) logging.level = LogLevel.INFO ant.jythonc(srcdir: sourcedirectory, destdir: outputdirectory) task jythonc(type: JythonC){ // sourcedirectory = file("src/main/python") // outputdirectory = file("$builddir/classes/main") // jythonclasspath = configurations.jython task jythonrun (type: JavaExec) { classpath configurations.jython.aspath, jythonc main "HalloWelt\$py" Wir erzeugen wieder eine eigene Konfiguration jython, verwenden das Repository Maven Central und spezifizieren die Abhängigkeit von den Jython-Bibliotheken. Dann definieren wir unseren eigenen Task-Typ JythonC, abgeleitet vom Typ DefaultTask. Wir deklarieren drei Eigenschaften, die wir für die Synchronisation mit Gradle als Eingabe- und Ausgabedateien annotieren. Das sourcedirectory ist als Eingabeverzeichnis annotiert und enthält die Python-Quelldateien, outputdirectory spezifiziert das Verzeichnis für die Ausgabedateien, und zusätzlich definieren wir noch mit der Eigenschaft jythonclasspath, dass die in der Konfiguration spezifizierten Abhängigkeiten als Eingabedateien zu sehen sind. Auf diese Weise wird der Task auch dann als nicht mehr aktuell betrachtet, wenn sich die Abhängigkeit (zum Beispiel durch eine neue Version der Bibliothek) ändert. Dann folgt die auszuführende Aktion als Groovy-Methode, die mit der markiert ist, so dass Gradle diese automatisch an die Liste der auszuführenden Actions anhängt. Jetzt können wir diesen Task-Typ JythonC genau wie die durch Gradle vorgegebenen Task-Typen verwenden. Wir definieren einen Task jythonc, der unseren Task-Typ verwendet. Da die vorgegebenen
9 7.3 Eigene Tasks 195 Werte für die verschiedenen Verzeichnisse den von uns benötigten entsprechen, brauchen wir hier nichts mehr zu ändern. Wenn wir im nächsten Schritt unseren Task in das Verzeichnis buildsrc verschieben, dann können wir uns mit dem Task prinzipiell in einer Multiprojektumgebung befinden. In dieser kann (und wird) das aktuelle Projekt, in dem der Task verwendet wird, ein anderes sein als das, in dem der Task ursprünglich verwendet wurde. Daher ist es also prinzipiell sinnvoll, die Werte auf jeden Fall explizit zu setzen. Die an dieser Stelle zu bevorzugende Alternative ist eine defensive Programmierung, in der wir die Werte als optional markieren und erst in der Task-Action prüfen, ob die Werte definiert sind. Falls diese ungesetzt sind, können wir auf das momentan aktive Teilprojekt zugreifen und die Werte entsprechend setzen. Allgemein gilt, dass wir mit Gradle so konservativ wie möglich programmieren sollten, um die Nutzer unserer Erweiterungen so weit wie möglich zu unterstützen. Hierzu gehört auch, verschiedene Möglichkeiten für das Setzen unserer Eigenschaften vorherzusehen. In unserem Fall wäre dies die Möglichkeit, die Ein- und Ausgabedateien sowohl als Zeichenkette als auch als File-Objekt oder als FileCollection setzen zu können Unser Task im Verzeichnis buildsrc Die bisher gezeigten Beispiele für eigene Tasks platzierten die Tasks im Build-Skript build.gradle. Der nächste Schritt ist, den Task in das Verzeichnis buildsrc zu verschieben. Die Task-Klasse Wir legen die Datei JythonC.groovy für unsere Task-Klasse de.gradlebuch.jythonc im Verzeichnis buildsrc/src/main/groovy/de/gradlebuch/ ab. Natürlich könnten wir die Klasse problemlos auch ohne Paket definieren, aber die Verwendung eigener Pakete sollte jedem Entwickler in Fleisch und Blut übergegangen sein. Die Definition der Klasse sieht sehr ähnlich aus wie bei der direkten Definition im Build-Skript, wir haben aber jetzt zusätzlich die Paket-Deklaration und die Import-Befehle für die Gradle-Klassen, die wir verwenden.
Gradle. Ein kompakter Einstieg in das moderne Build-Management-System ---> Mit einem Geleitwort von Hans Dockter, Erfinder von Gradle
Gradle Ein kompakter Einstieg in das moderne Build-Management-System ---> Mit einem Geleitwort von Hans Dockter, Erfinder von Gradle von Joachim Baumann 1. Auflage Gradle Baumann schnell und portofrei
Das Build Tool Ant. Sebastian Mancke, [email protected]
Das Build Tool Ant Sebastian Mancke, [email protected] Grundlagen Motivation Bei der Übersetzung und Pflege von Software treten viele, gleich bleibende Arbeitsschritte auf. Übersetzen des Codes
Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy
Über Ant und Maven zu SBT und Gradle Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy 07.04.2011 Speaker Andreas Hartmann [[email protected]] Principal Software Engineer
Einstieg in die Informatik mit Java
1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden
Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen
Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18
FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0
9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung
Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der
Vererbung Vererbung ist ein Konzept der objektorientierten Programmierung,, die es ermöglicht neue Klassen von bereits vorhandenen Klassen abzuleiten. In einer abgeleiteten Klasse (subclass) muss nur spezifiziert
Gradle. Ein kompakter Einstieg in modernes Build-Management. Joachim Baumann. Joachim Baumann, Gradle, dpunkt.verlag, ISBN
D3kjd3Di38lk323nnm Joachim Baumann Gradle Ein kompakter Einstieg in modernes Build-Management Joachim Baumann [email protected] Lektorat: René Schönfeldt Copy Editing: Sandra Gottmann, Münster-Nienberge
ANT. Kurzvortrag von Manuel Schulze. [email protected]
ANT Kurzvortrag von Manuel Schulze [email protected] ANT Überblick Teilprojekt der Apache Software Foundation [1] ANT ist Opensource Build-Tool ähnlich wie make (?) jedoch voll auf Java zugeschnitten
Einführung in die Programmierung 1
Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener
Einstieg in die Informatik mit Java
1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4
Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie
Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW,
Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14
Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Iman Kamehkhosh, Marcel Preuÿ, Henning Timm Übungsblatt 2
Kurzanleitung zu XML2DB
Kurzanleitung zu XML2DB Inhaltsverzeichnis 1. Einleitung...3 2. Entwicklungsumgebung...3 3. Betriebsanleitung...3 3.1 Einrichten der Java Umgebung...3 3.2 Allgemeines zu java und javac...4 3.2.1 Allgemeines
Einführung in die Programmierung mit Java
Einführung in die Programmierung mit Java Martin Wirsing 2 Ziele Geschichte der OO-Programmiersprachen Warum Java als Programmiersprache verwenden? Ein einfaches Java-Programm erstellen, übersetzen und
Repetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
Die Scala Entwicklungsumgebung. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung
Die Scala Entwicklungsumgebung 1 Was ist drin? Die Scala-Entwicklungsumgebung enthält Die Scala-Shell: scala Zwei Compiler: scalac und fsc (Fast Scala Compiler) Die API Die Laufzeitumgebung Den Scala-Basar
Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces
Programmieren I Martin Schultheiß Hochschule Darmstadt Wintersemester 2010/2011 1 / 20 Polymorphie/Späte Bindung Abstrakte Klassen Interfaces 2 / 20 Definition: Polymorphie Der Begriff Polymorphie (manchmal
Funktionen in JavaScript
Funktionen in JavaScript Eine Funktion enthält gebündelten Code, der sich in dieser Form wiederverwenden lässt. Mithilfe von Funktionen kann man denselben Code von mehreren Stellen des Programms aus aufrufen.
Einstieg in die Informatik mit Java
1 / 18 Einstieg in die Informatik mit Java Applets Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 18 1 Einführung 2 Sicherheits-Maßnahmen 3 Ereignisgesteuerte Programmierung
Einstieg in die Informatik mit Java
1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition
Grundlagen der Informatik Vorlesungsskript
Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1
Handbuch für die Erweiterbarkeit
Handbuch für die Erweiterbarkeit Inhalt Pakete für die Erweiterbarkeit... 2 Actions... 2 Items... 2 Itemset... 2 Die UseCaseNewAction... 3 Eigene Shapes... 4 Der Shape Container... 5 User Objects... 6
Modulare Anwendungen und die Lookup API. Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team
Modulare Anwendungen und die Lookup API Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team Die Notwendigkeit modularer Anwendungen Die Notwendigkeit modularer
Java Vererbung. Inhalt
Java Vererbung Inhalt 1 Zielsetzung... 2 1.1 Bewertung... 2 2 Grundlagen der Vererbung... 2 2.1 Super und Subklassen... 2 3 Überladen von Methoden... 4 3.1 Unterschiedliche Parameter... 4 3.2 Gleiche Parameter
Praktikum 1: Einführung, BMI Rechner
Praktikum 1: Einführung, BMI Rechner Aufgabe 1: Erstellen und Ausführen einer Java Konsolen-Anwendung Für dieses Semester können Sie wieder NetBeans verwenden. Sie sollten Java auch schon installiert haben.
Klausur Grundlagen der Programmierung
Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel
Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9
Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung
Übung: Verwendung von Java-Threads
Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum
Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015
Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur
Remote Method Invocation
Remote Method Invocation spezielle Technik aus dem Java-Umfeld Ausführung der Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VM s Aufruf
Einstieg in die Informatik mit Java
1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen
Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans
Graphische Benutzungsoberflächen mit Java Einführung in NetBeans Graphische Benutzungsoberflächen! Interaktion mit dem Programm! Datenein- und ausgabe! Rückmeldungen über Verarbeitung der Daten! Visualisierung
11. Komponenten Grundlagen der Programmierung 1 (Java)
11. Komponenten Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 10. Januar 2006 Einordnung im Kontext der Vorlesung
Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik
Programmieren II Innere Klassen Heusch 10, 13.10 Ratz 5.2.1, 9.8 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Innere Klassen Bisher kennen wir nur Klassen, die entweder zusammen
C++ Templates. Wozu Templates? Definition von Templates. Gebrauch von Templates. Instanziierung und Organisation
C++ Templates Wozu Templates? Definition von Templates Gebrauch von Templates Instanziierung und Organisation Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik Martin-Luther-Universität
Abschnitt 9: Schnittstellen: Interfaces
Abschnitt 9: Schnittstellen: Interfaces 9. Schnittstellen: Interfaces 9.1 Die Idee der Schnittstellen 9.2 Schnittstellen in Java 9.3 Marker-Interfaces 9.4 Interfaces und Hilfsklassen 9.5 Zusammenfassung
1 Vorraussetzungen. 2 Installiere Eclipse. FS 2015 Herausgabe: 2015-02-18 Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich
252-0842-00L Programmieren und Problemlösen Eclipse Tutorial FS 2015 Herausgabe: 2015-02-18 Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich 1 Vorraussetzungen Falls Java noch
Vom lokalen Build zum Deployment
Vom lokalen Build zum Deployment International PHP Conference Manuel Pichler 12.10.2011 Vom lokalen Build zum Deployment 1 / 36 Über mich Diplominformatiker Mehr als 10 Jahre Erfahrung im PHP-Umfeld Autor
8. Dokumentenverwaltung mit CVS eine Einführung
8. Dokumentenverwaltung mit CVS eine Einführung 8.1 Warum CVS? 8.2 Basiskonzepte 8.3 Vorbereitungen 8.4 Anlegen eines neuen Projekts 8.5 Bearbeiten eines Projekts 8. Dokumentenverwaltung mit CVS 8-1 8.1
Eclipse :Bis(s) zum Javacode Einführung in die Eclipse-IDE
EF-III-A6 Einführung in Eclipse Seite 1 von 5 Eclipse :Bis(s) zum Javacode Einführung in die Eclipse-IDE Erläuterung Eclipse/IDE Eclipse ist eine integrierte Open-Source-Entwicklungsumgebung für Software
Innovator 11 classix. Anbindung an Eclipse. Einführung, Installation und Konfiguration. Connect. Michael Kaaden. www.mid.de
Innovator 11 classix Anbindung an Eclipse Einführung, Installation und Konfiguration Michael Kaaden Connect www.mid.de Einführung in die Innovator-Eclipse-Anbindung Die hier beschriebene Anbindung steht
Web-Anwendungsentwicklung mit dem Delivery Server
Web-Anwendungsentwicklung mit dem Delivery Server Java-Framework auf Basis der Open API Bernfried Howe, Webertise Consulting GmbH WEBertise Consulting Dipl. Informatiker (Wirtschaftsinformatik) 2001-2010
Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung
rof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 23. April 2009 1/14 Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung Prof. G. Kemnitz Institut für Informatik,
Übungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
FACHHOCHSCHULE MANNHEIM
für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen
AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen
L AKTUEL ZU fritz JOBST JAVA 8 PROGRAMMIEREN IN JAVA 7. Auflage Im Internet: Alle Beispielprogramme und Lösungen 4 1 Der Einstieg in Java keinem Fall zulässig. Die Schreibweisen Hello.java für den Namen
Systematisches Testen
Systematisches Testen SEP 136 Unit Testing Objektorientierte Entwicklung Entwicklung von vielen unabhängigen Einheiten (Klassen, Methoden), aus denen das Gesamtprogramm zusammengesetzt wird. Ziel: Wenn
Software Engineering II
Software Engineering II Codegenerierung für den SmartIO Editor mit der Modeling Workflow Engine Wintersemester 10/111 Fachgebiet Software Engineering Albert Zündorf / Wiederholung Bisher im Laufe des Semesters
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Der Experimentierkasten In diesem Semester werden wir eine Reihe von Algorithmen kennenlernen und mit diesen Experimente durchführen. Dafür benötigen wir einen geeigneten
RIWA NetUpdater Tool für automatische Daten- und Softwareupdates
RIWA NetUpdater Tool für automatische Daten- und Softwareupdates Grundlegendes... 1 Ausführbare Dateien und Betriebsmodi... 2 netupdater.exe... 2 netstart.exe... 2 netconfig.exe... 2 nethash.exe... 2 Verzeichnisse...
S.M. Hartmann GmbH IT Solutions
S.M. Hartmann GmbH 82008 Unterhaching Prager Straße 7 www.smhsoftware.de S.M. Hartmann GmbH IT Solutions Software für den modernen Handel SMH-Connect/400 Version V6.0 Beschreibung SMH-Connect: iseries
Programmieren II. Exkurs: Apache Maven. Institut für Angewandte Informatik. KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft
Programmieren II Exkurs: Apache Maven KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Agenda Einführung in Apache Maven Was ist Apache Maven? Verwendung Einbindung in IDE APACHE
Folge 18 - Vererbung
Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,
Programmierkurs Java
Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen
T:\Dokumentationen\Asseco_BERIT\Schulung\BERIT_LIDS7_Basiskurs\Impo rt_export\beritde_lt_do_20120918_lids7.basisschulung_import_export.
LIDS 7 Import/Export Mannheim, 11.02.2013 Autor: Anschrift: Version: Status: Modifiziert von: Ablage: Christine Sickenberger - Asseco BERIT GmbH Asseco BERIT GmbH Mundenheimer Straße 55 68219 Mannheim
Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java
Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11
Programmieren in C/C++ und MATLAB
Programmieren in C/C++ und MATLAB Christof Beyer Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 7-1 Bisher eingeführt war für Namen nur der Datentyp char. Dieser erlaubt das Speichern
Java: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
Persistenz. Ralf Gitzel
Persistenz Ralf Gitzel [email protected] 1 Themenübersicht Ralf Gitzel [email protected] 2 Übersicht Grundkonzepte Entity Beans Meine erste Entity Entity-Manager Lernziele Übungsaufgabe 3 Grundkonzepte
Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik
Klassen und höhere Datentypen Objekte, Felder, Methoden Küchlin/Weber: Einführung in die Informatik Klassen Klasse (class) stellt einen (i.a. benutzerdefinierten) Verbund-Datentyp dar Objekte sind Instanzen
Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden
Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08
Dr. Monika Meiler. Inhalt
Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer
Carlos Santos. Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften. Universität Hamburg
Universität Hamburg Proseminar: Werkzeuge für das wissenschaftliche Schreiben Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Überblick Einführung - Geschichte Einstellungen
Einführung in die C-Programmierung
Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).
Es wird das Struts <html:options> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.
Struts Code Peaces Element Es wird das Struts Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Allgemeines Autor: Sascha Wolski Sebastian Hennebrüder
7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen
7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen
2.3 - Das Verwaltungsmodul moveon installieren - SQL-Version
2.3 - Das Verwaltungsmodul moveon installieren - SQL-Version Das Verwaltungsmodul moveon besteht aus zwei Komponenten: dem moveon Client und der moveon Datenbank. Der moveon Client enthält alle Formulare,
Buildsystem. Maven & Scons. Controls Entwicklungsforum Januar 2012
Buildsystem Maven & Scons Controls Entwicklungsforum Januar 2012 1 2 a call from the past Binary Repository Speichern von Artefakten (z.b. Shared Library und zugehörige Header) Versionierung von Artefakten
Checkliste: Konfiguration eines Datenraums nach einem Upgrade von Brainloop Secure Dataroom von Version 8.10 auf 8.20
Checkliste: Konfiguration eines Datenraums nach einem Upgrade von Brainloop Secure Dataroom von Version 8.10 auf 8.20 Diese Checkliste hilft Ihnen bei der Überprüfung Ihrer individuellen Datenraum-Konfiguration
Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans
Projekt Entwicklung verteilter Softwaresysteme mit Web Services SoSe 2008 - Java Server Pages und Servlets - 7. April 2008 Verteilte Systeme und Informationssysteme (VSIS) Department Informatik Universität
Präsentation Interfaces
Einführung in Java Präsentation Interfaces Nozar Delassaei Marvi Inhalt 1. Erinnerung Klasse Objekte Beispiel Klasse Abstrakte Klasse Beispiel Abstrakte Klasse Mehrfachvererbung-1 Mehrfachvererbung-2 2.
Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11
Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Carla Delgado-Battenfeld Fatih Gedikli Tobias Marschall Benjamin Schowe
C++ Templates - eine kleine Einführung. Allgemein. Funktionstemplates. Allgemein. Funktionstemplates. Klassentemplates
Überblick C++ Templates - eine kleine Einführung Fabian Scheler, Peter Ulbrich, Niko Böhm Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)
Innovator 11 classix. Java Reverse Engineering. HowTo. Ralph Schönleber. www.mid.de
Innovator 11 classix Java Reverse Engineering Ralph Schönleber HowTo www.mid.de Mit Innovator Java Reverse Engineering durchführen Inhaltsverzeichnis Voraussetzungen... 2 Java Reverse Engineering... 2
Überschreiben von Methoden
Vergleich der DoME Realisierungen: Methode ausgeben Version 1 (ohne Vererbung): Anzeigen aller Informationen CD: A Swingin Affair (64 Min)* Frank Sinatra Titelanzahl: 16 Mein Lieblingsalbum von Sinatra
Einführung in die Programmierung
Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität
Für die Erstellung von Javaprogrammen sind eventuell zwei Komponenten nötig. 1. Das Java-Develepment-Kit (JDK) und die 2. Java Runtime Engine (JRE)
Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Für die Erstellung von Javaprogrammen sind eventuell zwei Komponenten nötig. 1. Das Java-Develepment-Kit (JDK) und die 2. Java
Probeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
Objektorientierung: Klassen und Objekte
Objektorientierung: Klassen und Objekte Klasse: Beschreibung für eine Menge von Objekten Schablone, Bauplan abstrakte Form Objekt: Instanz einer Klasse konkreter Inhalt (Werte) Klassen bestehen aus Attributen
Linux Prinzipien und Programmierung
Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2010/2011 1 / 13 2 / 13 Editoren/IDEs Prinzipiell können C-Programme mit jedem beliebigen Texteditor geschrieben
Aufbau von Klassen. class punkt {...
Einführung in C++ Aufbau von Klassen Eine wird mit dem Schlüsselwort class eingeleitet, und endet mit einem Semikolon. Der Inhalt wird zwischen geschweiften Klammern geschrieben. class punkt {... ; Im
Vererbung und Traits
Vererbung und Kiermaier Ulrich FWP-Fach: Scala: Java-Nachfolger oder akademisches Experiment? 11.5.2010 Übersicht Aufbau nach dem Buch Programming in Scala von Martin Odersky, Lex Spoon, Bill Venners Vererbung
Vorlesung Informatik II
Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm
Rails Ruby on Rails Ajax on Rails. Clemens H. Cap http://wwwiuk.informatik.uni-rostock.de http://www.internet-prof.de
Rails Ruby on Rails Ajax on Rails Who is who? Rails Ziel: Framework für Web (2.0) Anwungen Beschleunigung der Entwicklung Konzept des Agilen Programmierens Ruby Interpretierte Sprache Rails Integrationen
Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1
Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1 Kapitel 1: Die ersten Schritte mit Greenfoot 1 Starten Sie Greenfoot. (Wenn Sie Greenfoot das erste Mal öffnen, erscheint ein Dialogfenster,
3 Objektorientierte Konzepte in Java
3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine
Vererbung. Was versteht man unter dem Begriff Vererbung?
Was versteht man unter dem Begriff Vererbung? Elternkonstrukt - Datenelemente - Methoden o Deklaration o Definition Kindkonstrukt... Main... Elternkonstrukt b = new Kindkonstrukt() b.fn() Komponenten &
Codegenerierung mit Xtend. 21. Januar 2015
Codegenerierung mit Xtend 21. Januar 2015 Überblick Xtend bietet einen Template-basierten Ansatz zur Codegenerierung Xtend enthält eine spezielle Template-Sprache. Das Modell kann beliebig benutzt werden,
EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel [email protected]
EJB Beispiel JEE Vorlesung 10 Ralf Gitzel [email protected] 1 Stundenkonzept Gemeinsame Übung Stoff der letzten Stunde wird gemeinsam in einem Beispiel umgesetzt Details werden nochmals erklärt bzw.
Java kennt neben Klassen und Objekten auch das Konzept von Schnittstellen. (engl. Interfaces).
Java kennt neben Klassen und Objekten auch das Konzept von Schnittstellen. (engl. Interfaces). Was es mit den Schnittstellen auf sich hat und was der Unterschied zu den Klassen ist, wollen wir uns in diesem
Übungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
Multibooting mit Windows 2000 und Windows XP
Multibooting mit Windows 2000 und Windows XP Einführung Ein Computer kann so konfiguriert werden, dass Sie bei jedem Neustart des Computers zwischen zwei oder mehr Betriebssystemen wählen können. Sie können
KURZANLEITUNG DUPLICITY MIT CLOUD OBJECT STORAGE
KURZANLEITUNG DUPLICITY MIT CLOUD OBJECT STORAGE Version 1.12 01.07.2014 SEITE _ 2 INHALTSVERZEICHNIS 1. Einleitung...Seite 03 2. Einrichtung des Systems...Seite 04 3. Erzeugen eines Backup-Skripts...Seite
