Prüfungsvorbereitung: Software
Software im Überblick
In den frühen Tagen der Computertechnik wurde die physische Ausrüstung eines Computersystems als Hardware bezeichnet. Oft war das Programm des Computersystems direkt mit dieser Hardware verbunden (fest verdrahtet). Erst später entstand der Begriff Software als Gegenstück zur Hardware und umfasste sowohl die Programme als auch die Daten, die auf einem Computersystem arbeiten oder verarbeitet werden. Neue Definitionen von Software beziehen auch Dokumentationen in den Begriff ein.
Grundsätzlich kann Software in Systemsoftware (zum Beispiel Betriebssysteme wie Windows) und Anwendungssoftware (zum Beispiel Textverarbeitungsprogramme wie Word) unterteilt werden. Zusätzlich gibt es Software, die die Entwicklung von Software ermöglicht (wie Entwicklungsumgebungen à la Eclipse). Darüber hinaus kann Software entweder installiert (fest im Betriebssystem verankert) oder als portable Version vorliegen. Das Nutzungsrecht von Software ist ebenfalls wichtig: Im Gegensatz zu käuflich zu erwerbenden Vollversionen werden einige Softwareprodukte als Freeware oder Shareware angeboten, während andere Softwareversionen mit Werbung (Adware) arbeiten.
Alle Arten von Software haben gemeinsam, dass sie letztlich in Form von Maschinencode vorliegen, was nichts anderes als eine Folge von Nullen und Einsen ist. Der Computer oder die Hardware kann diesen Maschinencode ausführen und damit ein Betriebssystem oder eine Anwendung starten. Die Entwicklungsumgebung übernimmt in der Regel die Aufgabe, diesen Maschinencode zu erzeugen. Dazu wird ein Programm in einer höheren Programmiersprache verfasst, wie beispielsweise in C++, und anschließend durch die Entwicklungsumgebung in den entsprechenden Maschinencode übersetzt. Das Erstellen von Software besteht also im Wesentlichen aus dem Verfassen von Code in einer Programmiersprache und der Übersetzung dieses Codes in Maschinencode durch die Entwicklungsumgebung.
Die Entwicklung der Programmiersprachen ist ein kontinuierlicher Prozess. In den Anfängen dominierten strukturierte Sprachen, die später durch objektorientierte Sprachen ergänzt und teilweise ersetzt wurden. Darüber hinaus wurden deklarative Sprachen wie SQL oder funktionale Sprachen wie Haskell entwickelt. Von besonderem Interesse ist die Entwicklung von künstlicher Intelligenz (KI). Eine der ersten Programmiersprachen für KI war beispielsweise LISP (List-Processing). Heutzutage sind wir bereits von KI umgeben, sei es durch virtuelle Assistenten wie Alexa, Siri, Cortana, Google und andere oder im Bereich der Robotik. Moderne KI ist keine herkömmliche Software, die einfach einen vordefinierten Algorithmus ausführt, sondern ein lernendes System. Dazu sammelt und verarbeitet die KI große Datenmengen und lernt daraus. Der Begriff "Big Data" steht daher in direktem Zusammenhang mit KI.
Einordnung von Programmiersprachen
Ordne die folgenden Begriffe in eine Mindmap ein.
- Strukturierte Programmierung
- SQL
- Mit Kontrollstrukturen den Ablauf gestalten
- C#
- Das "Was" steht im Vordergrund
- Grundsätzliches Konzept zur Beschreibung einer Programmiersprache
- Deklarative Programmierung
- Aufteilen eines Programmes in kleine Einheiten
- Mengen-orientierte Programmierung
- Das "Wie" steht im Vordergrund
- LISP
- Funktionale Programmierung
- Java
- Objektorientierte Programmierung
- Imperative Programmierung
- C++
- Prozedurale Programmierung
- Objekte und Klassen stehen im Vordergrund
- Programmierparadigma
Pseudo-Code
Entwickle einen Pseudo-Code zu folgenden C-Befehlen.
Übersetze das folgende C-Programm in Pseudo-Code
Algorithmus
Die Bilddaten sollen mit einer Lauflängenkodierung komprimiert werden. Das bedeutet, dass sich wiederholende Zeichen
zusammengefasst werden und nur die Anzahl und das entsprechende eichen gespeichert werden. Zur Erkennung einer
Lauflängenkodierung wird ein spezielles Sonderzeichen eingesetzt, welches nicht in den Bilddaten enthalten ist. Eine
Zusammenfassung erfolgt erst ab 4 Zeichen.
In einem ersten Schritt ist davon auszugehen, dass die Daten nur
aus
Großbuchstaben bestehen.
Das folgende Beispiel zeigt eine Komprimierung auf 44% der Originalgröße:
Beispiel: Rohdaten
QQQQRRRRRRTTTTTTTTTTLLLLLLLLLLLMNNNVVVVVVVVVVVAAAAAAAAAAAAA(59 Zeichen)
Nach der Komprimierung ("§" ist das Sonderzeichen, welches die Wiederholung einleitet):
§4Q§6R§10T§11LMNNN§11V§13A(26 Zeichen)
Die folgenden Funktionen und Variablen können für den Algorithmus genutzt werden:
Code | Zweck |
Bilddaten[ ] |
enthält die Daten in Form eines Arrays (Typ Zeichen) |
BildDaten.GetLength() |
liefert die Größe des Arrays |
BildDaten[index] |
liefert das Zeichen an der Stelle index (nullbasiert) |
KomprimierteDaten[ ] |
Array für Speicherung der komprimierten Daten |
KomprimierteDaten.Add(Zeichen) |
Fügt dem Array ein Zeichen hinzu |
HTML und XML
Ordne die folgenden Elemente entsprechen zu:
- XML-Datei "kunden.xml"
- DTD-Datei "kunden.dtd"
- Elementtyp mit Text als Inhalt
- Elementtyp mit Element-Inhalt
- Elementtyp mit beliebiger Wiederholung (mindestens 1x)
- Elementtyp mit Daten
- Wiederholungselement
- Kommentar
- Kennzeichnung der Datei als XML-Datei
- Verweis auf eine externe DTD-Datei
Element | Wähle | |
---|---|---|
a) | ||
b) | ||
c) | ||
d) | ||
e) | ||
f) | ||
g) | ||
h) | ||
i) | ||
j) |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="keywords" content="IT" />
<meta name="description" content="PV-Vorbereitung" />
<title>PV-Vorbereitung</title>
<body>
Erläutere kurz die folgenden HTML5-Elemente
UML-Klassendiagramm
Analysiere die Rechnung und erstelle ein Klassendiagramm mit den entsprechenden Attributen und Beziehungen.
UML-Use-Case-Diagramm
Analysiere die Kundenforderung und erstelle ein Use-Case-Diagramm:
Anforderung des Kunden (Pizzeria):
Nach dem Anruf eines Kunden soll geprüft werden, ob der Kunde neu ist. Falls ja, so sollen die Kundendaten erfasst werden. Dann werden die Bestelldaten aufgenommen. Der Kunde kann entscheiden, ob er die Bestellung selbst abholen will, oder eine Auslieferung erfolgen soll. Im zweiten Fall liefert der Auslieferungsfahrer die Pizza aus. Die Auslieferung der Bestellung beinhaltet, dass der Auslieferungsfahrer nach der Zustellung eine SMS mit der Bestellnummer der erfolgten Lieferung an die Pizzeria sendet.
Programmablaufplan - Refactoring
Analysiere den Programmablaufplan und prüfe, ob er im Sinne des Refactorings verbessert oder vereinfacht werden kann. Für die Ablauf-Optimierung sollen nur drei Verzweigungen (Selektionen) benutzt werden - weitere Variablen dürfen aber eingeführt werden:
Einordnung Datenbankaspekte
Vergleich relationales und objektorientiertes Datenbanksystem
Relationales Datenbanksystem
Objektorientiertes Datenbanksystem
Ordne die Kategorien zu
Befehle | SQL-Kategorie | Wähle |
---|---|---|
SELECT, INSERT, UPDATE, DELETE | ||
CREATE, TRUNCATE, ALTER, DROP | ||
GRANT, REVOKE | ||
ROLLBACK, COMMIT |
Entity-Relationship-Diagramm
Entwurf eines ER-Diagramms
Anforderungen des Kunden:
Das Unternehmen hat feste und freie Mitarbeiter, deren Daten verwaltet werden müssen. Sowohl feste als auch freie Mitarbeiter sind Projekten zugeordnet. Die festen Mitarbeiter sind in einer Lohntabelle eingruppiert. Die freien Mitarbeiter werden nach festen Tagessätzen bezahlt. Die Anzahl der Tage wird durch die Dauer der Projektzugehörigkeit bestimmt.
SQL-Abfragen
Erstelle eine Abfrage, die alle Kundendaten anzeigt, deren Nachname alphabetisch vor 'M' steht.
Erstelle eine Abfrage, die alle Kundennamen sowie die Anzahl er zugehörigen Konten auflistet.
Erstelle eine Anweisung, um das Konto von Frau 'Kaiser' zu ändern. Sie hat geheiratet und heißt nun 'Lüdenscheid-Kaiser'
Der Kunde 'Maisen' möchte ein neues Premiumkonto (Kontonummer: 238238) eröffnen. Erstelle alle nötigen Anweisungen (eventuell mehrere SQL-Anweisungen). Beachte, dass die Konto_ID dabei fortlaufend sein soll.
Softwareentwicklungsprozess
Es soll der Prozess vom Quellcode zum ausführbaren Programm dargestellt werden. Bringe die gegebenen Symbole in die korrekte Abfolge.
Anhand eines Java-Quellcode-Beispiels sollen wesentliche Bezeichnungen aus der Programmierung dargestellt werden. Ordne die Begriffe zu.
Bezeichnung | Wähle | |
---|---|---|
a) | ||
b) | ||
c) | ||
d) | ||
e) | ||
f) | ||
g) | ||
h) | ||
i) | ||
j) | ||
j) |