Upload
phungcong
View
215
Download
0
Embed Size (px)
Citation preview
Informatik I+II Basisprüfung ETHZ – BAUG – Semester 1+2
06. August 2011 S e i t e | 1 Christoph Hager
INFORMATIK I © chager - Version 2.0 B. Waldvogel, ETHZ
COMPUTER
NE TZWE RKE
BGERIFFE
Internet: Weltweites Netzwerk mit dem Rechner miteinander Daten austauschen können. World-Wide-Web: Eine Nutzungsart des Internets. Mit einem Webbrowser können weltweit elektronische (Hypertext)-Dokumente (Webseiten) abgerufen werden, welche durch Hyperlinks verknüpft sind. LAN, MAN, WAN: local, metropolian, wide area Network Client-Server: Clients beziehen Dienstleistungen von Servern. Mail, Web, Lizenz, Druckserver. VPN: virtual private network, Tunnel zu Intranet, Internet Stellt Sichere Verbindung her; Datenverschlüsselung FTP: File Transfer Protokoll zur Datenübertragung in FTP-Servern Protokolle: Vereinbarung über Art und Abfolge des Datenaustausches zwischen Computer und Prozessen. Protokollstack im Internet (gilt auch für FTP): Jede Schicht bietet der darüberliegenden einen Dienst an, modulrarer Aufbau, für jede Aufgabe eine Ebene
HTTP: Hypertext Transfer Protocol, Protokoll zum Übertragen von Webinhalten TCP: Transmission Control Protocoll: Erstellt Verbindung, garantiert zuverlässige Übertragung und richtige Reihenfolge IP: Internet Protocoll, Schickt Datenpackete an richtige Adresse Ethernet:
Physikikalische Ebene, effektive Verbindung
Peer to peer: Alle Rechner gleichwertig (zB illegales Filesharing) URL: Universal Remote Locator, Internetadresse http://www.ethz.ch, http: Verwendetes Protokoll, Rest = Host Ports: „Anschluss“, 80=http, webserver 110=POP-Mailserver
SY ST EM ARCH IT EKTU R
PROZE SSOR /CP U
CPU (Central Processing Unit) , Hauptrechnereinheit. Sie führt Programmcode aus, kann Daten vom Hauptspeicher lesen, modifizieren und wieder zurückschreiben. Kann durch Programmbefehle angesteuert werden. Besteht aus ALU (Arithmetic Locical Unit) und Register. Die CPU holt Instruktionen vom Hauptspeicher und führt diese aus. Nur auf Daten die in die Register der CPU geladen wurden, können Operationen ausgeführt werden. Da der Arbeitsspeicher im Vergleich sehr langsam arbeitet, holt die CPU im Voraus die Daten und speichert diese im Cache zwischen. Das führt zu einem Geschwindigkeitsvorteil. Sind Cache, Register und CPU schlecht abgestimmt, muss die CPU immer sehr lange auf den Arbeitsspeicher warten, bis dieser die Daten zur Verfügung stellt.
SPEIC H ER
Harddisk: Harddisk besitzt grosse Speicherkapazität und kann grosse Daten dauerhaft speichern. Die Daten befinden sich auf Scheibe, auf welche mit Mechanik zugegriffen wird, daher ist Zugriffszeit eher gross. Wird in beinahe jedem PC verbaut um Daten permanent zu speichern. Langsam. SSD: Solid State Drive verfügt über relativ langsame Zugriffszeit und ist, da keine Mechanik benötigt wird, schockfest. Besitzt nicht flüchtigen Speicher, ist zur Datensicherung geeignet. Durch immer grössere Speicherkapazität wird sie Harddisk ablösen. Arbeitsspeicher, RAM: (Random Access Memory) Inhalt muss permanent aufgefrischt werden, volatil. Chip als DRAM oder SRAM. Im RAM wird das auszuführende Programm geladen, sodass die CPU Instruktionen abrufen kann. Programme können Arbeitsspeicher als Zwischenspeicher verwenden. Arbeitsspeicher wird über die CPU gesteuert. RAM verfügt über eine relativ schnelle Zugriffszeit. Kann auf jedes Byte einzeln zugegriffen werden, der Speicher ist jedoch flüchtig.
WEI TER E K OMP ONE NT E N
Motherboard: Platine mit wichtigen Komponenten… Schnittstellen: Diese stellen die Verbindung zwischen Peripheriegeräten und der CPU dar. Grafikchip (onboard): Dieser besteht aus einem Prozessor (GPU) der für Bildoperationen spezialisiert ist. Die GPU kann mit der CPU kommunizieren und ebenfalls aufs RAM zugreifen. Das Programm sendet via Treiber die Steuerbefehle. Batterie: Sorgt dafür, dass die Systemuhr weitertickt. Netzwerkkarte
AUFGAB EN D ES B E TRIEB SS YS TE MS:
Es stellt das Bindeglied dar zwischen der Hardware und der Benutzeroberfläche und Regelt die Abläufe dazwischen.
Es steuert die Verwaltung der vorhandenen Ressourcen (Prozess, Speicher und Dateiverwaltung) → Lokalitätsprinzip. So kann u.a. auch Multitasking betrieben werden.
Das BS steuert die Hardwarekomponenten und angeschlossenen Geräte wie Drucker, Scanner und Netzwerk.
Es stellt den Schutz gegen aussen sicher und verwaltet Benutzerrechte.
Es behandelt Fehler und stellt Dienstprogramme zur Verfügung.
Unterschied Betriebssystem und graphischer Oberfläche: BS alleine kann alles obengenannte, es wäre aber zu umständlich direkt damit zu arbeiten, da keine Oberfläche vorhanden ist. Die grafische Oberfläche dient dazu, um Bedürfnissen des Benutzers mit einer ansprechenden und intuitiven Art gerecht zu werden. Anstatt Bytes herum zuschieben, Dateien mit Maus per Drag & Drop verschieben
TREIB ER
Um Hardware zu betreiben benötigt BS Treiber zur Ansteuerung der Komponenten.
ZAHLE N
BINÄR – BAS IS 2
Bit oder 1 Byte bit k byte T
M P G [ ] E → effektiver Speicherplatz meist kleiner wegen:
Formatierung, Blockgrösse
OS, Organisation (FileAllocation Table)
Dateigrösse, komprimierte Formate
Gibt Ansatz dass: kbyte 1000byte, kibyte 1024byte
AND OR XOR XNOR
Halbadierer: 2 Eingänge → 2 Ausgang: X,Y → 1 Summe, 1 Carry/Übertrag Volladierer: 3 Eingänge → 2 Ausgänge X,Y,C → 1 Summe, 1 Carry/Übertrag Basiswerte:
4096 2048 1024 512 256 128 64 32 16 4 2 1
→ Zahlen starten mit 0!
HE X – BAS IS 16
Basiswerte:
4096 256 16 1
UMRE CH NU NG
Dez→Binär:
, Ziffer ganz rechts
, 2. Ziffer v. rechts
…
Dez→Hex:
, Ziffer ganz rechts
Hex/Binär→Dez: 10111 → Tabelle mit Basis und Zahl
INTER PRE TA TION
Bitmuster werden als Text, Zahlen, Multimedia… codiert
ZE ICH EN
ASCI I A M E R I C A N S T A N D A R T C O D E F I N F O R M A T I O N I N T E R C H A N G E
128 Zeichen (7 bit) 8. Bit als Erweiterung/Fehlerkorrektur
0-31: Steuerzeichen für Drucker
32-64: Sonderzeichen
65-90: Grossbuchstaben
97-122: Kleinbuchstaben
U NIC OD E
16 bit pro Zeichen → Alle Sprachen (Chin.,Jap, Russ., Arab…)
0- 127: identisch mit ASCII
128-255: kann abweichen von erweitertem ASCII
Text mit Unicode braucht doppelt so viel Speicher wie ASCII
FARBE N
RGB
Additives Farbmodell: Alle Farben → weiss Als RGB: (Rot,Grün,Blau) Werte: oder
Schwarz: 0,0,0 #000000 Weiss: 255,255,255 #FFFFFF Mittelwerte: 128, #80
CMY K
Subtraktives Farbmodell: Alle Farben → schwarz CMYK: Cyan, Magenta, Yellow, Black Wird häufig in Druckern verwendet.
PUPL IKA TIO NE N
Peer-Review: Artikel werden durch Experten begutachtet
AUFBAU
1. Abstract 2. Einleitung 3. Related Work 4. Daten 5. Experiment 6. Resultat 7. Diskussion / Ausblick 8. Dank 9. Verzeichnisse
16 8 4 2 1
1 0 1 1 1
Informatik I+II Basisprüfung ETHZ – BAUG – Semester 1+2
06. August 2011 S e i t e | 2 Christoph Hager
HTML
CHARA KTE RIST IK
Markup Language: Auszeichnungssprache, schreiben nicht programmieren, definierter Syntax, beschreibt Inhalt und Aufbau eines Dateiformates, keine Interpretation der Darstellung.
HTML: Hyperthreading Markup Language für Internet-dokumente (Spezialisierung von XML (Austauschformat für Strukturierte Daten))
GML: Geography Markup Language, basiert auf XML
KML: Keyhole Markup Language (Google pandant)
Wysiwyg Editoren: Seamonkey, GoLive, Dreamweaver
Ist nicht Case-sensitiv (Gross-Kleinschreibung egal)
Zeichen: < < > > & & ä ä Ö Ö
Start und Endtags sauber setzen: keine Überlappung…
Attribute immer in Anführungszeichen
Browser interpret. HTML sehr tolerant, nicht immer gleich
BEISPI E L <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!-- Christoph Hager, ETHZ, Informatik I, v1 28sep -->
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
<link rel="SHORTCUT ICON"
href="http://www.ethz.ch/icons_site/kuppel_icon_c000.gif" />
<title>Hobby</title>
</head>
<!-- Main Page -->
<body style="background-color: rgb(88, 103, 102); color: rgb(0, 0, 0);"
vlink="#000000" alink="#000000" link="#000000">
<!-- Kopfbalken -->
<table style="text-align: center; width: 800px; height: 160px; margin-left:
auto; margin-right: auto; font-family: Calibri;"
border="0" cellpadding="0" cellspacing="0"> <tbody>
<tr>
<td style="text-align: center; vertical-align: top;">
<!-- Picture -->
<img alt="hobby" src="hobby.jpg" style="border: 0px solid ;
height: 160px;"><br>
</td>
</tr>
</tbody>
</table>
<!-- Mainframe -->
<table style="text-align: left; width: 800px; margin-left: auto; margin-
right: auto; font-family: Calibri;"
border="0" cellpadding="15" cellspacing="0">
<tbody>
<tr>
<td style="vertical-align: top; width: 650px; height: 600px;
background-color: rgb(192, 192, 192);"><big>
<span style="font-weight: bold;">Meine
Hobbys</span></big><br>
<br>Boarden<br>
<img style="width: 220px;" alt="snow" src="snow.jpg"><br>
<a target="_top" href="aufgaben.html">InfoI</a><br>
</td>
</tr>
</tbody>
</table>
<br style="font-family: Calibri;">
<br>
</body>
</html>
ERGÄ NZ U NG EN
alink: beim drüberfahren, vlink: visited link
Farben: #00,33,66…, rgb(r,g,b), Text; black, red
FORMA TIER U NG MI T CSS
Bessere Methode zur Gestaltung (im head einbauen) <style type=“text/css“>
h1 {color:#FFCCDD; background-color:black }
body {background-color:rgb(51,0,102)}
</style>
LATEX Markup Language…
DATE I- AUFB AU
Grundgerüst: Dokument-Definition, -Anfang und -Ende. \documentclass[Optionen]{class}
+EINSTELLUNGEN/DEFINITIONEN
\begin{document}
+INHALT
\end{document}
STRU KTUR
Optionen [] und Werte {} von Kommandos sind optional \documentclass[a4paper]{scartcl}
DATE IE ISNT ELLUL NG E N
KOMME NTAR E
Mit % am Zeilenanfang kann auskommentiert werden
PACK E TE
Zusätzliche Packete einbinden \usepackage[ansinew]{inputenc}
IN HALT
TIT E LB LAT T
→ dokumentclass Option titlepage \title{Ich bin der Titel}
\author{Der Autor}
\date{Heute}
\maketitle
INHA LTSV ER ZEI CH NIS \tableofcontents → 2-3 mal kompilieren
KAPI TE LS TRU K TUR ( JE NAC H D OM UM ENT KLA SSE) \section{}
\subsection{}
\subsubsection{}
\paragraph{}
TE X T
Fliesstext: einfach ohne Steuerzeichen schreiben
Sonderzeichen mit \ vornedran: \#, \{, \%, \_ …
Neue Seite mit \newpage
Neue Zeile kann mit \\ begonnen werden
Eine Leerzeile ergibt einen neuen Abschnitt
\bigskip Ende eines Abschnittes ergibt grössen Abstand
Um den Zeilenumbruch zwischen zwei Wörter zu verhindern benötigt man eine Tilde ~ (wird als Leerzeichen dargestellt)
Für … gibt es auch den Tag: \ldots
UMG EBU NG E N \begin{kommando}
Text, Inhalt…
\end{kommando}
FORM ELN
\(...\), $...$ für Inline \[...\], $$...$$ für zentriert In equation-Umgebung für separate Formel mit Nummer (I)
$$\sum_{i=1}^{n} 2^{i} = 1 $$
$$\forall x \in {\mathrm R}:x^{2} \geq 0 $$
$$\int_{0}^{\frac{\pi}{2}} \sin x dx $$
Zeichen allgemein wie in Word
B ILD ER U ND GRAFI KE N
graphix-Package einbinden \begin{figure}[Option] h für hier
\centering
\includegraphics[parameter]{bild.pdf}
\caption{Beschreibung}
\label{fig:bild1}
\end{figure}
VERW EIS E
Auf Objekte die mit \label{definition} gelabelt wurden, können mit \ref{X} zugegriffen werden
PUPL IZ IER E N
Es sollten keine Fehler oder Warnungen gemeldet werden
Mit kompilieren wird eine ps-Datei erstellt die dann wenn gewünscht in PDF geplottet wird.
Etwa 2-3 mal kompilieren damit alles geupdatet wird und erstelltes PDF vorher schliessen.
Vorsicht mit Sonderzeichen in Dateinamen ect…
Braucht für alles ein Package
Informatik I+II Basisprüfung ETHZ – BAUG – Semester 1+2
06. August 2011 S e i t e | 3 Christoph Hager
MATLAB
WICHT IG E BEF EHL E
ALLGEM EI N Eingaben Pfeiltasten Letzte Befehle zurückholen ans Variable für letztes Resultat (answer) …; Unterdrückt Anzeige des Resultats clc Clear command Window
Hilfen doc … Öffnet Thema in der Hilfe (separates Fenster) help … Schreibt kurzen Hilfetext ins Command Window lookfor … Durchsucht Einträge nach Thema (Ctrl+C zum
Abbrechen) F1 Öffnet neues Fenster mit Hilfethemen zu akt.
Eingabe
Variablen syms … Zeichen(kette) als variable definieren X=… Variable definieren Workspace Hier werden die Variablen gespeichert. Es lassen
sich auch selber neue definieren (u.a. mit Tabellenansicht)
pi Zahl Pi
REC H NE N Operationen + - * / Es wird immer mit Matrizen gerechnet
(Dimensionen!) ^ Potenzen . vor Operator Eingaben/Zahlen werden Elementweise verrechnet
Folgen linspace(a,b,n
) Erstellt linearverteilte Folge (Vektor) von a bis und mit b aus n Elementen
a:i:b Erstellt linearverteilte Folge (Vektor) von a bis b in i-er Schritten
Matrizen [] Umgebung ,/Leerzeichen Nächste Spalte ; Neue Zeile eye(m,n) m x n Einheitsmatrix (Bei n x n Matrix einfach nur
eye(n)) ones(m,n) Matrix mit lauter 0en zeros(m,n) Matrix mit lauter 1en rand(m,n) Matrix mit Zufallszahlen round
(rand(m,n)*r)
Matrix mit Zufalls-Ganzzahlen zwischen 1 und r
A(i,j) Ausgabe des Elementes der i-ten Zeile, j-ten Spalte B(m:n,k:l) Bereichsangabe: Von m bis n-ter Zeile…
Bei (:,k:l) werden Alle Zeilen ausgegeben C(:,j)=[a;b;c] Damit können auch einzelne/mehrere
Matrixelemente angepasst werden [V,D]=eig(A) Liefert 2 Matrizen: V=normiertes T, D=Eigenwerte x=A\b A*x=b nach x Auflösen
PLOTT E N Vorgehen Beispiel
x definieren (x=Folge) x=linspace(-10,10,21);
Funktionen definieren y=2x^2-3;
Funkionen plotten plot(x,y)
Mit hold on/off Plottüberschreibung abschalten
Vorgehen kann auch geschachtelt werden
plot(x,cos(x))
Befehle Siehe auch Hilfe plot(x,y„…„) Plottet Funktionen linespec Steuert Farbe, Linientyp und Stützpunkte
xlabel ylabel Beschriftung x und Y-Achse title Titel Text(x,y,„Text„) Erstellt Beschreibung im Graph (Es kann auch
mit Formelsyntax von Tex und Word gearbeitet werden)
legend Erzeugt Legende grid Gitternetz
Die ganzen Formatierungen lassen sich auch im neu geöffneten Fenster anpassen. Mit RM Property Editor stehen praktisch alle Möglichkeiten offen. Im Figures-Window kann auch über File/Generate Code der „Erstell-Code“ betrachtet werden – um Einiges effizienter als alles von Hand vorgängig einzustellen. Damit könnte dann auch ein Skript erstellt werden, damit die Formatierung wieder verwendet werden kann. Beispiel:
x=-5:0.01:5;
hold on
plot(x,sinh(x),'b')
plot(x,cosh(x),'--c')
plot(x,tanh(x),'-.m')
title('Hyperbolikus-Funktionen','FontSize',20,
'FontName','Calibri');
legend('Sinh','Cosh','Tanh');
grid;
3D P LOT T EN Befehle Siehe auch Hilfe
meshgrid Erstellt ein Gitternetz aus 2 Folgen surf Generiert eine Oberfläche aus Daten colormap Farbgebung der Oberfläche
Einstellungen funktionieren analog dem 2D-Plotten Beispiel:
[X,Y] = meshgrid(-2:.2:2, -2:.2:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(X,Y,Z)
colormap(winter)
WEI TER ES Datentypen
Int32 Ganze Zahl, 32bit double Reelle Zahl mit doppelter Genauigkeit char Zeichenkette Logical Wahrheitswerte
Diverses disp() Anzeigen von Text zB. num2str(x) Umwandeln von String to Number (str2num gibt’s auch) sprintf(x) Zur Kombiniereung von Text, variablen ect. mit grosser
Formatierungsmöglichkeit.
FU NK TI ONE N function [a,b] = test(x,y) %Beschrieb Funktion a=x+3*y; b=5+y; end
Ausführen: >>[u,v] = zahlen(3,4);
SCH LAU FE N while (Bedingugen)
Anweisungen
end
for i=1:n
Anweisung
end
if (Bedingung)
Anweisung
elseif (Bedinung)
Anweisung
else
Anweisung
end
ALLGM E IN E H INW E ISE
Folgende Punkte sollten beim Arbeiten mit MATLAB beachtet werden:
Es wird immer mit Matrizen gerechnet
Variablen müssen vorgängig als solche definiert werden (syms)
Zwischen Gross und Kleinschreibung wird unterschieden
Malzeichen (*) müssen grundsätzlich immer geschrieben werden (nicht wie beim voyage 200)
Zeichenketten werden in Hochkomas geschrieben: ‘mein Text‘
Bei grösseren Rechnung eigenes M-File erstellen und mit F5 ausführen
Über File/Preference… Keyboard lassen sich Shortcuts definieren. zB (Clear Command Window)
GU I GRAF IC AL U SER INT ERF A CE
Mit GUIDE können eigene Progrämmchen erstellt werden.
AUFBAU MI T DA T EIE N:
GUI_Programm.fig: Oberfläche der GUI
GUI_Programm.m: Automatisch generierter Code zur GUI Programm kann angepasst werden: Mit handles.var Variablen definieren. Diese müssen beim Start initalisiert werden:
function GUI_Programm_OpeningFcn() %HAC Startwerte definieren handles.a=1; handles.b=1;
Für die Einzelnen Objekte in .fig werden automatisch Grundstrukturen generiert. Diese Objekte können nun die Variablen füttern:
function slider1_Callback() %HAC Slider,Kurve1() val=get(hObject,'Value'); handles.a=val; % Wert in handles.a schreiben guidata(hObject, handles);
… function pushbutton1_Callback()
%HAC
cla reset % clear the current plot kurve1( handles.a, handles.b);
Zum Beenden folgenden Button erstellen: function pushbutton1_Callback()
%Fenster Schliessen delete(handles.figure1)
kurve1.m Das eigentliche Programm, das ausgeführt wird. kurve1( handles.a, handles.b);
Als Parameter werden Werte von handles weitergegeben
BEIP SIEL E
PLOT EI NER F UNK TI ON MI T S UMM E x=-(5*pi):0.01:5*pi; % x Werte definieren
summe=0; for k=1:n %n muss definiert werden summe=summe+sin(x*(2*k-1))/(2*k-1); end y=summe; % Berechnet Summe [ 1/n*sin(n*x) ] von 1 bis n, n
sind ungerade Zahlen
plot(x,y); end
GRÖSS E D ER MASC HINE N ZAH L %Epsilon-Test %Parameter: n=52; %--------- epsilon=1; frmt=get(0,'Format'); format long; for k=1:n epsilon=epsilon/2; end epsilonend=epsilon; a=epsilonend+1; txt1=sprintf('\tVersuch mit n = %d',n); txt2=sprintf('\tepsilon+1 = %.16u',a); txt3=sprintf('\tepsilon =
%.16u',epsilonend); txt4=sprintf('\teps (MATLAB) = %.16u\n',eps); disp('Aufgabe 37') disp(txt1) disp(txt2) disp(txt3) disp(txt4) format(frmt); %n max ist 52
ANA LYSIS - NI VEA U LI NIE NP ORTRAI T cl clear syms x y y=linspace(-10,10,2000);
x0=sqrt(2*y.^2-4*y); x1=sqrt(2*y.^2-4*y+1); x2=sqrt(2*y.^2-4*y+2); x3=sqrt(2*y.^2-4*y+3); x4=sqrt(2*y.^2-4*y+4); %Niveaulinien hold on plot(x0,y,'color',[0 .6 1]) plot(x1,y,'color',[0 .1 1]) plot(x2,y,':','color',[1 .2 .1]) plot(x3,y,'color',[1 .5 .2]) plot(x4,y,'color',[1 .8 .3]) plot(-x0,y,'color',[0 .6 1]) plot(-x1,y,'color',[0 .1 1]) plot(-x2,y,':','color',[1 .2 .1]) plot(-x3,y,'color',[1 .5 .2]) plot(-x4,y,'color',[1 .8 .3]) xlim([-3,3]) ylim([-2,4]) grid title(['Aufgabe 2 b)'
,sprintf('\n'),'Niveaulinienportrait'],'FontSize',14) legend('c=0','c=1','c=2','c=3','c=4','location','Best') xlabel('X-Achse'); ylabel('Y-Achse'); %axis square fh = figure(1); set(fh, 'color', 'white'); hold off
Informatik I+II Basisprüfung ETHZ – BAUG – Semester 1+2
06. August 2011 S e i t e | 4 Christoph Hager
DATENBANKEN
BEGR IFF S ERKLÄR UN G EN
DBVS: Datenbankverwaltungssystem, Software zur Verwaltung Oracle, MySQL. Integritätsbedingungen:
Minimalanforderungen für Instanzen einer Relation
Primärschlüssel besteht aus 1 oder mehreren Schlüsselattr.
Es kann mehrere mögliche Schlüssel geben
Festlegung, welches Attribut Primärschlüssel ist.
Entität/Tupel: Ein eindeutig zu bestimmendes Objekt (Abstraktion, Model), dem Informationen/Eigenschaften (Attribute) zugeordnet werden können (Wie ein Zeileneintrag in Tabelle). Entitätsmenge/Relation: Alle Entitäten mit denselben Attributen (zB eine Tabelle). Eine Relation kann sich im Laufe der Zeit verändern. Zu einem gewissen Zeitpunkt liegt immer eine Instanz der Relation vor. Entitätstyp: Strukturbeschreibung der Menge. Beschreibung durch eindeutigen Namen und einer zugehörigen Menge von Attributen (Kopfzeile in Tabelle). Attribut: Lateinisch für zuteilen, zuordnen. Eine Eigenschaft, Information, nähere Bestimmung, die etwas beschreibt oder näher definiert (Die Definition einer Spalte in der Tabelle). Schlüsselkandidat/Schlüssel: Ein oder mehrere Attribute mit eindeutige Identifizierung einer Entität. Muss zeitunabhängige Invariante sein und auch für zukünftige Entitäten gelten. Primärschlüssel: Eine Integritätsbedingung; gewählter Schlüsselkandidat zur eindeutigen Identifikation. (können auch mehrere sein) einer Entität innerhalb einer Entitätsmenge. Häufig eine ID. Jedes Tupel muss sich hier von anderen unterscheiden. Fremdschlüssel: Fremdschlüssel ist ein Sekundärschlüssel in einer Relation, der in einer anderen Relation Primärschlüssel (oder Schlüsselkandidat) ist. Also ein Schlüssel, der auch in einer anderen Tabelle verwendet wird, in Beziehung steht. Beziehungstyp: Lassen Beziehungen zwischen Entitäten herstellen. Wird mit Kardinalitäten beschrieben: n:m-Beziehung. Beispiel: Ein Kunde bestellt m verschiedene Produkte. Ein Produkt wird von n Kunden bestellt. Kardinalität: Anzahl Elemente in einer Menge. zB Anzahl Zeilen in Tabelle. Kann aber auch als Vorkommens-Häufigkeit verwendet werden. Hohe Kardinalität einer Spalte heisst das hier wenige Duplikate vorahnden sind, niedrige Kardinalität, dass wenig verschiedene Eigenschaften beschrieben werden. → siehe auch ERM: N:M-Beziehungen E/R-Modell (Entwurf) Relationale Datenbank Anwendung als Tabelle
Entität Tupel Zeileneintrag
Entitätsmenge Relation Inhalt der Tabelle
Entitätstyp Relationstyp/-Schema Kopfzeile
Relationship(Beziehung) Fremdschlüsselbezeichnung (Verknüpfung von Tabellen)
Attribut Attribut Spalte (Definition)
Attributwert Attributwert Zelleneintrag
Mehrbenutzerbetrieb: DBVS koordinieren die Aktivitäten aller Benutzer im Hintergrund, so dass man ein Mehrbenutzerbetrieb möglich ist. Einerseits muss dabei ein hoher Grad an Parallelität erzielt, andererseits stets die Konsistenz der Daten gewährleistet werden. Transaktion: Bezeichnung einer Abfolge von Aktionen die als eine logische Einheit betrachtet wird und entweder vollständig oder gar nicht ausgeführt wird. Damit wird sichergestellt, dass bei vielen parallel verlaufenden Transaktionen wie zB. bei Banküberweisungen die Daten richtig verarbeitet werden. Das Transaktionssystem muss dabei die ACID-Eigenschaften einhalten. ACID-Prinzip: ACID bedeutet: Atomicity, Consistency, Isolation, Durability und ist Voraussetzung für Transaktionen.
Atomarität: Alles oder nichts-Eigenschaft. Entweder wird die ganze Transaktion ausgeführt oder nichts.
Konsistenz: Nach (nicht unbedingt während) der Transaktion müssen die Daten wieder in konsistenter Form sein, die Integritätsbedingungen dürfen nicht verletzt sein.
Isolation: Transaktionen dürfen sich nicht gegenseitig beeinflussen.
Dauerhaftigkeit: Das Ergebnis der Transaktion wird dauerhaft in der Datenbank gespeichert: (commit oder rollback)
Redundanz: Eine Information kommt nur an einer Stelle in der Datenbank vor. Kann sonst zu Inkonsistenz führen. Anomalien:
Einfüge-Anomalie: Schlüsselattribut fehlt oder ist bereits vorhanden. Eintrag kann nicht erstellt werden.
Änderungs-Anomalie: Bei Redundanz wird Änderung nicht an allen Werten vorgenommen.
Lösch-Anomalie: Bei löschen eines Datensatzes gehen mehr Informationen verloren als beabsichtig. (Bei Beziehungen)
ERM
Datenbankmodell mit Darstellung als Entity-Relationship-model:
Rechtecke: Entitätstyp/Entität Kreise: Attribute, Unterstriechungen sind Primärschlüssel Rhomben: Beziehungen/Relationship
NOR MALF ORM E N
Um Redundanzen und Anomalien in Datenbanken zu vermeiden sollten diese Normalisiert werden.
1. NORMA LF ORM
Jedes Attribut muss einen atomaren Wertebereich mit einer Information haben: Ein Attribut für eine einzige Einheit: Vorname, Nachnahme, Adressenelemente alle separat.
In der Relation gibt es keine Wiederholungsgruppen oder mehrere gleiche Information in einem Attribut: Nicht mehrere Telefonnummern in einem Attribut. Ob man Telefon1, Telefon2 als Attribute oder eine separate Relation verwenden will, hängt je nach Situation ab.
Probleme: Suchen und Filtern schwierig, Anzeigen einer nicht-atomaren Einheit schwierig.
Lösung: Aufteilen von Attributen und aufspalten in mehrere Datensätze.
2. NORMA LF ORM
1NF erfüllt
Jedes Nichtschlüsselattribut von allen Schlüsselkandidaten voll funktional abhängig. Es geht hier nur um die verwendeten Primärschlüssel-Attribute. Die restlichen Attribute können theoretisch immer noch voneinander abhängig sein.
Problem: Redundanz
Lösung: Aufteilen in mehrere Relationen unter Verwendung von Fremdschlüsseln
3. NORMA LF ORM
2NF erfüllt
Jedes Nichtschlüsselattribut von keinem Schlüsselkandidaten transitiv abhängt. Ein Nichtschlüsselattribut darf nicht von einer Menge aus Nichtschlüsselattributen abhängig sein. Ein Nichtschlüsselattribut darf also nur direkt von einem Schlüssel abhängen.
Problem: Redundanz
Lösung: Aufteilen der Relationen unter Verwendung von Fremdschlüsseln
Merke:
Ist die Relation in 1. Normalform und besteht der Primärschlüssel aus nur einem Attribut, so liegt automatisch die 2. Normalform vor.
Ist eine Relation in 2. Normalform und besitzt sie ausser dem Primärschlüssel höchstens ein weiteres Attribut, so liegt die Tabelle in 3. Normalform vor.
MY SQL
SQL: structured query language Kann Erstellen, Modifizieren Abfragen von Daten und Tabellen
BEM ERK U NGE N:
Vorsicht mit Codierung: Sonderzeichen ect, charakter SET Latin 1/latin_1_german1 verwenden, Firefox: UTF-8
Error 1064: Syntaxproblem
Error 1062: Eintrag bereits vorhanden
csv: Keine Header
DAT ENBA NKABFRAG E N
Tabelle , Primärschlüssel, Fremdschlüssel erstellen: create table gemeinde(Gde_Nr integer primary key,
Name char(50), Kantonskuerzel char(5));
alter table biotop add foreign key(Gde_Nr)
references gemeinde(Gde_Nr);
insert into biotop(FID, Name, Code, Gde_Nr)
values (1, "Baggersee", 1, 928);
update myTable set Ort=„Zürich„ where PLZ=8000;
Löschen: drop table biotop, gemeinde, pflanzen, polygone,
schutzstatus, biodiversitaet
Daten über Fremdschlüssel verbinden: --Aus Übung--
select * from biotop join biodiversitaet where
biotop.FID = biodiversitaet.biotop_FID;
--Übersicht: Biotop, Schutzstatus, Gemeinde--
SELECT b.Name as Biotopname, s.Bezeichnung as
Schutzstatus, g.Name as Lage
FROM
biotop b,
schutzstatus s,
gemeinde g
WHERE b.Code_Schutzstatus =s.Code_Schutzstatus
and
b.Gde_Nr=g.Gde_Nr
ORDER BY b.Code_Schutzstatus
LIMIT 0 , 40
--Totalexport--
SELECT
b.FID as ID,
b.Name as Biotopname,
s.Bezeichnung as Schutzstatus,
g.Name as Lage,
g.Kantonskuerzel as Gebiet,
p.Name as Pflanzenvorkommen
from biotop b,
schutzstatus s,
gemeinde g,
pflanzen p
join biodiversitaet
where
b.FID = biodiversitaet.biotop_FID and
b.Code_Schutzstatus =s.Code_Schutzstatus and
b.Gde_Nr=g.Gde_Nr and
biodiversitaet.Code_Pflanzen=p.Code_Pflanzen
ORDER BY b.FID
LIMIT 0 , 40
Ergänzungen:
null, not null: Leer, nicht leer
float, real, Integer,date: Datentypen
asc, desc, sum, avg, min, max…
Zeichenketten mit ..where Ort like „Zuerich„..
%: Wildcard für Filter, like ist eine „Wildcardsuche“
Informatik I+II Basisprüfung ETHZ – BAUG – Semester 1+2
06. August 2011 S e i t e | 5 Christoph Hager
INFORMATIK II © chager B. Gärtner, ETHZ
JAVA - BASICS
KO NSOL E / EING AB EA UF FO RDER U NG
Starten mit cmd oder Eingabeaufforderungen unter Start
NAVIAGA TI ON U ND K OMM A ND OS Eingaben cd xxx\yyy Wechseln in das/die angegebenen
Unterverzeichnisse sofern vorhanden cd ..\..\xxx Wechseln in übergeordnete
Verzeichnisse D: Wechseln des Laufwerkes dir Auflisten der Ordner und Dateien im
aktuellen Verzeichnis dir *.java Auflisten der Dateien mit Endung .java copy aa.txt bb.txt Erstellt Kopie von aa mit Namen bb copy *.* xxx Kopiert alle Dateien in ein
Unterverzeichnis xxx del aa.txt Löschen der Datei aa.txt rename aa.txt ab.txt Umbenennen von aa in ab mkdir xxx Erstellen eines Unterverzeichnisses xxx rmdir xxx Löschen des Unterverzeichnisses xxx Esc Löscht die Eingabe cls Löscht den Verlauf Ctrl+C Abbrechen des aktuellen Befehles Pfeil nach oben/unten Letzte Eingaben holen TAB Autokomplettierung von Dateinamen
zB. set Listet Umgebungsvariablen auf ver Zeigt Windows-Version an help Kleine Befehlsreferenz
JAVA -PR OGRAMM K OMPI LI ERE N U ND STAR T EN 1. Zum Verzeichnis mit der xxx.java Datei navigieren 2. Kompilieren des Programmes:
javac MeinProgramm.java → xxx.class wird generiert 3. Starten: java MeinProgramm
Argumente können leerzeichengetrennt dahinter geschrieben werden.
→ Unterscheidung zwischen Gross/Kleinschreibung → Umgebungsvariablen in PATH und CLASSPATH müssen gesetzt sein. Aktuelles Verzeichnis mit …;.\;…
ECL IP SE
1. Rechts neben „Play“-Taste auf Run configurations… oder RMT auf xxx.class im Navigator und Run As…
2. Kontrollieren ob richtiges Projekt und Main Class eingestellt ist (wird nicht automatisch geändert), sonst mit Browse und Search anpassen
3. Unter Arguments können Parameter mitgegeben werden. ( Wie in der Konsole Leerschlaggetrennt)
4. Run: Programm wird kompiliert und ausgeführt, Ergebnis in der Konsole von Eclipse ausgeben.
KOMP IL IERU NG
Compiler: Übersetzt Progeammcode in Maschinen oder Bytecode (Zwischencode) → Erzeugt Datei.class Virtual Maschine von JAVA: Übersetzt Zwischencode zu Maschinencode und lässt ihn laufen. Interpreter: Lässt Prog mit Quellcode laufen, erzeugt keine Datei
KOMM E NTA RE
// Kommentar am Zeilenende
/* */ für normalen Block-Kommentar
Innerhalb des /** */ -Kommentars vor einer Klasse oder Methode können Informationen zu dieser platziert werden. Diese werden dann in Eclipse bei Klick auf die Klasse oder Methode interaktiv angezeigt. Alternativ kann auch ein Javadoc erstellt werden: Project/Generate Javadoc… Man findet die index.html im Projektordner unter doc /**
* Übung 2<br>
* Aufgabe 1
*
* @author Christoph Hager
* @version 1.0
* @param a = Alpha
* @param b = Beta
*/
NA ME N SV ER GEB UN G
Nur Ziffern und Buchstaben, am Anfang immer Buchstabe. Unterstrich/$ möglich
Klassennamen: grosser Anfangsbuchstaben
Variablen: Kleinbuchstaben
Konstanten: Grossbuchstaben
Es dürfen keine Schlüsselwörter verwendet werden: abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends, final, finally, float, for, if, goto, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while
E IN GAB E UND A U SG ABE
EI NFAC HE AU SGABE
Klasse mit Main-Methode die „Hello“ plottet. public class Aufgabe1 {
public static void main(String[] args) {
System.out.println("Hello");
}
}
PARAME T ER ABGR EIFE N
Aus Array args[n] können Parameter abgegriffen werden n startet mit 0:
public class Aufgabe1 {
public static void main(String[] args) {
int i = Integer.parseInt(args[0])
System.out.println(i);
}
}
→ args*+ sind Strings (Zeichenketten) → Datentyp muss übereinstimmen, sonst Abbruch, Fehler
FEHLE RBEH AN DLUN G
Am einfachsten mit Try-Catch int x = 0; // Definiere x
try // Kontrolle ob Argument Ganzzahl ist
{
x = Integer.parseInt(args[0]);
} catch (Exception e) {
System.out.println("'" + args[0]
+ "' ist keine Ganzzahl oder zu
gross.");
return;
→ Exception können spezifiziert werden → Beispiele → throws Exception bei Fkt-Definition → höhere Ebene
DATE NT YP E N
PRIMITIV E DAT E NTY PE N
byte 8bit float 32bit
short 16bit double 64bit
int 32bit boolean 1bit true/false 1/0
long 64bit char 16bit \u0000-\uFFFF
GANZZA HLE N
Wertebereich: → Integer.MAX_VALUE; Integer mit max. Wert
GLEIT K OMMAZA H LEN
Darstellung: Vorzeichen Basis des Exponenten Mantisse: Enthält Ziffern der Gleitkommazahl Exponent Maschinenzahlen von sind nicht gleichmässig verteilt:
Weitere Schreibweisen 5.2x10^-5 4.0E-2 -23161e-5
Java Float: 2f = 2.0 Double: 1.0e-2 = 0.01 Regeln
Teste keine Fliesskommazahlen auf Gleichheit eine Zahl gerundet wurde
Vermeide Addition von Zahlen sehr unterschiedlicher Grösse
UMWA ND LU NG E N
X.parseX() ist zum umwandeln von Daten in einen Datentyp x
Mit Typcast (typ) y wird y explizit in Datentyp typ umgewandelt
Grundsätzlich wird bei mathematischen Operationen mit dem Typ weitergerechnet, was weniger Verlust hat.
(implizit)
Eclipse gibt grundsätzlich immer Hinweise wenn eine Operation nicht gültig ist
L IT ERA LE
Ausdrücke die direkt in den Programmcode geschrieben werden 1 2.0 (=double) 2L 2f 23e-2
AU SDRÜCK E U ND OP ER AT IO N EN
BEGRIFFE
Polymorphie: Vielgestaltigkeit, zB Überladung, OO
ÜBER LAD U NG
bei Addition oder aneinanderhängen von Zeichenketten
KLAM MERR EG ELN
Ausdrücke folgen „Punkt vor Strich“ , „Links nach rechts“ und „unäre vor binären“ (Vorzeichen +,-, und ++,-- bei Var. zuerst)
AR ITHM E TISC HE OPR EAT OR E N
binäre: +,-,*, /, % (Modulo, Divionsrest) unäre: Vorzeichen, Inkremente
VERG LEICH SOP ERAT OR E N
gleich == Vergleiche: <, <=, >, >= ungleich !=
Vorsicht mit gleich: binär → dizimalsystem != Zahl
BOOLSC HE OP ERAT OR E N
nicht ! Und/Oder/XOR &, |,^ bed. Und &&
bed. Oder ||
→ Linke Zeichen Verwenden, so wird direkt abgebrochen wenn false.
ZUW EIS U NGS OP ERAT OR E N
Aufbau: var op= expr → var = var op expr für: +,-,*,/,%,&,|,^,… Beispiel: i *= 2; // verdoppelt i
INKR EM E NTE
a++ Post: a=a+1, alter Wert wird zurückgegeben
++a Prä: a=a+1, neuer Wert wird zurückgegeben
a-- Post: a=a-1, alter Wert wird zurückgegeben
--a Prä: a=a-1, neuer Wert wird zurückgegeben
KO NST ROLL STR UKTUR E N
Blöcke: Für Sequenz von Anweisungen: {list of statement} int log = 0;
while (n > 1) { ++log; n/=2;}
System.out.println("log = " + log);
→ Variablen sind nur innerhalb Block sichtbar, in welchem sie definiert wurden.
IF V ERZW EIG U NG if (condition) if (x < y)
statement; min = x;
else if
statement1;
else if
statement2;
else else
statement3; min = y;
WHILE-S CH LEIF E while (condition)
statement;
DO-S CH LEIFE do
statement;
while (condition);
→ Anweisung wird mind 1x ausgeführt
FOR -SC H LEIF E for (init ; condition ; atend)
statement;
Beispiel: for (int i=0, j=1; i<=64; ++i, j*=2)
System.out.println("2 hoch "+i+"="+j);
→ do und while können mit for simuliert werden. → Leere condition gilt als wahr → Nach for() kommt kein ; !
Informatik I+II Basisprüfung ETHZ – BAUG – Semester 1+2
06. August 2011 S e i t e | 6 Christoph Hager
KOMPA KT E F OR -S CH LEIF E public static long iterativ(int x) {
long result = 1;
for (long i = x; i > 0; i--)
result *= i;
return result;
AUSWAH LA NW EIS U NG switch(test) {
case a: System.out.println("Fall A");
break;
case b: System.out.println("Fall B");
break;
default: System.out.println("-");
break;
}
Ohne break; → falltrought, untere werden auch ausgeführt
Beliebige Reihenfolge
Kein Label darf doppelt vorkommen
default ist optional
SPRU NGA NW EISU NG E N (FÜR SC HLEIFE N)
break; Beendet innerstes Konstrukt
break here; Springt zu Label here:
continue; Springt an Anfang Schleife
return; Rückgabewert
TER NÄR ER OPERA T OR
→ Kurze Schreibweise für einfache If-Schleifen: System.out.println
(x < 1 ? "x ist klein" : "x ist gross")
x = (y == 0) ? 0 : 100;
ARRA Y S
Erstellt neues Array (Deklaration) int[] arrayname = new int[LÄNGE];
Füllt Element i mit k, i = [0 bis LÄNGE-1] (Initalisierung) Arrayname[i] = k;
int[] myarray = {1,2,3,4};
Ausgabe Array System.out.println(Arrays.toString(arrayname));
Sortiert Array aufsteigend java.util.Arrays.sort(arrayname);
Kopiert Array (Referenz) int[] array2 = array1;
Arraywert um 1 erehöhen Arrayname[f-1]++
Länge von Array ausgeben (Anzahl Elemente) arrayname.length
→ Arraywerte sind am Anfang mit „Arbeitsspeichermüll“ gefüllt Am besten mit 0en initalisieren
REKUR IO NE N
Methoden die sich selbst aufrufen. Es braucht immer eine IF-Bedingung, damit keine Endlosschleife entsteht. Iterationen dagegen funktionieren mit Schleifen
F IBONACCI public class Fibonacci3{
public static void main(String[] args) {
for (int n=0; n<=50; ++n)
System.out.println ((n+1) + "-te Fibonacci-Zahl: " +
fibonacci(n));
}
// PRE: n >= 0
// POST: RW ist (n+1)-te Fibonacci-Zahl f_{n}
static int fibonacci (int n) {
if (n<2) return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
}
FAKU LTÄT public static long rekursiv(int x) {
if (x < 1)
return 1;
return x * rekursiv(x - 1);
}
METH OD EN (FU NKT IO NE N)
VOR - U ND NAC HBE DINU NG E N
PRE: Was muss bei Funktionsaufruf gelten? Spezifiziert den Definitionsbereich POST: Was gilt nach dem Funktionsaufruf? Spezifiziert Wert und Effekt des Funktionsaufrufs → Assertions vor Berechnung setzen: assert(expression) bei False wird Programm mit Fehlermeldung abgebrochen
// PRE: e >= 0 || b != 0.0
// POST: Rueckgabewert ist b^e ("b hoch e")
public static double pow (double b, int e)
{
assert (e >= 0 || b != 0.0);
double ergebnis = 1.0;
if (e < 0) {
// b^e = (1/b)^(-e)
b = 1.0/b;
e = -e;
}
for (int i = 0; i < e; ++i)
ergebnis *= b;
return ergebnis;
}
RÜC KGABE
return ausdruck; Ausdruck wird von Funktion zurückgegeben
PARAME T ER
Werteparameter: Direkte Variablen für primitive Datentypen Referenzparameter: Pointer auf Speicher → man kann nicht einfach Kopien erstellen!
OV ER LOADI NG
Schnittstelle muss bekannt sein (Signatur): Methodenname Typ des Rückgabewertes Anzahl und Typ der Parameter
In der Java API dokumentiert
Mehrere Methoden mit gleichem Namen sind möglich solange sich die Signatur unterscheidet → Overloading
OBKEKTORIENTIERTE PROGRAMMIERUNG
ÜBERBL ICK
Datensicherheit: Datenänderung nur über Methoden
Information Hiding: Interner Aufbau nicht Sichtbar
Schnittstellen: erleichtern die Verwendung von Funktionen
Programmstrukturierung: Speichern Objekt als Einheit
Wiederverwenden von Klassen(Bibliotheken)
Unterschied Klasse / Objekt einer Klasse: Die Klasse ist nur der Bauplan oder Definition. Ein Objekt ist eine Instanz einer Klasse, so können mehrere Objekte erstellt werden die einer Klasse angehören. (Analog AutoCAD mit Blockdefinition → Dynamische Blockreferenz).
Private/Public: Methoden die als public deklariert werden, können von jeder anderen Klasse aufgerufen werden, bei private ist das nicht möglich. Nützlich wenn man nicht will, das von aussen auf eine interne Funktion einer Klasse zugegriffen werden darf. Szenario: Klasse stellt Steuerung eines Autos zur Verfügung, es ist jedoch nicht gestattet, auf die Benzineinspritzung direkt zuzugreifen.
METH OD EN U ND KL A SSE N
BEGRIFFS ERK LÄRU NG Klasse: Bauplan, Beschreibung/Definition für ein Objekt. Beinhaltet Eigenschaften und Methoden.
Klasse muss selben Namen wie java-Datei haben
Kann aus einer oder mehreren Methoden bestehen
Ein Programm kann auch aus mehreren Klassen bestehen (mehrere Java-Files)
In einem Programm darf nur eine Klasse eine Main-Methode haben und zwar die „Haupt“-Klasse mit welcher das Programm auch kompiliert wird. Gestartet wird dann mit dem Class-File der „Haupt“-Klasse.
Methode: Eine Funktion, stellt der Klasse Funktionen zur Verfügung. Objekt: Instanz einer Klasse. Alles ausser der primitiven Datentypen sind Objekte. Realisation eines Objektes nennt man Instanzieren. Konstruktor: Instanziert ein Objekt, erst damit wird die Speicherbelegung durchgeführt. Oberklasse: Von hier wird geerbt. In Diagramm zeigt Pfeil zu Oberklasse. Vererbung: Methoden und Eigenschaften können von Oberklassen geerbt werden. Aufruf mit extends Überschreiben: Eine Klasse kann Methoden von Oberklassen überschreiben, werden aber nur in der Klasse selbst anders verwendet. Deklaration: Übersicht Zugriffsrechte auf Methode von Klassen: Zugriff erlaubt
Eigene Klasse Innere Klassen
Klassen im selben Package
Unterklassen Sonstige Klassen
private Ja Nein Nein Nein
(default) Ja Ja Nein Nein
protected Ja Ja Ja Nein
public Ja Ja Ja Ja
Weitere Deklarationen:
Final: Von finalen Klassen kann nicht geerbt werden, finale Variablen lassen sich nur einmal definieren. (Schutz für User)
Abstract: Von abstrakter Klasse kann keine Instanz erzeugt werden, es benötigt zuerst eine Implementation (zB Vererbung mit extends…).
Static: Statische Methoden benötigen keine Instanz um verwendet werden zu können. Alles was nicht oo ist. Main Mehtode ist static. In alles Objekten gleich
Void: Methode gibt ihrer aufrufenden Methode kein Rückgabewert. Wird häufig bei Ausgabefunktionen verwendet.
KO NST RUKT OR EN
Struktur von Befehlen die als Konstruktor bezeichnet werden
Hat gleichen Namen wie die Klasse zu der er gehört
Er Instanziert ein Objekt
Er wird für jedes Objekt einmal aufgerufen → new…
Wird kein Konstruktor angegeben werden default Werte gesetzt
Es können mehrere Konstriktoren mit versch. Signaturen definiert werden
Er ist eine spezielle Methode
KONS TR UK T OR PU NKT( ) : Punkt p = new Punkt(3.0,2.0);
→ siehe auch Beispiele für Definition
KLASSE O O AUFB AU
class Punkt { Klasse private final double xKoordinate; Datenfelder private final double yKoordinate;
// POST: erzeugt den Nullpunkt
public Punkt () { Default-Konstruktor xKoordinate = 0.0;
yKoordinate = 0.0;
}
// POST: erzeugt den Punkt (x,y)
public Punkt (double x, double y) {
xKoordinate = x; Konstruktor yKoordinate = y;
}
public double getX() { Methode return xKoordinate;
}
Werte in Datenfelder (nicht private) schreiben: OnkelDagobert.name = "Duck";
Werte auslesen: System.out.println(OnkelDagobert.name);
Methoden-Aufruf: Objektname.methode()
Überladung von toString: Aufruf: println(Instanzname) public String toString() {
return "huhu";
}
→ Man kann nur Verweise kopieren und nicht Objekte!
WRAPP ER -K LASS E N Klassen von Primitiven Datentypen. zB. Integer.parseInt(), Wrapperklasse Integer zu int
GETT ER
Offene Methode (public) um Datenfelder auszulesen. So werden interne Zuweisungen nicht ersichtlich.
public double getX() {
return xKoordinate; private Datenfeld }
So kann ein Objekt nicht einfach modifiert werden (Schutz)
So können Klassen angepasst werden ohne, dass der Benutzer es merkt. Methoden heissen immer noch gleich.
KLASSE NH IRARC HIE
Aufbau mit Abgeleiteten Klassen
Klassendiagrarmm in UML (unified modelling langauge) Alle Objete in Java sind in Hirachie angelegt. Basisklasse: java.lang.Object
ÜBERS CHR EIB E N M E TH OD E
Eine Methode der Oberklasse kann von einer abgeleiteten Klasse überschrieben werden.
Informatik I+II Basisprüfung ETHZ – BAUG – Semester 1+2
06. August 2011 S e i t e | 7 Christoph Hager
VERW E ND E N M E TH OD E N D ER OB E RKLASS E
Mit super.methode() (Für Funktionen in Unterklassen)
Beispiel Überschreibung und super: // Ueberschreibt die Oberklassen-Methode
public void print() {
// Aufruf der Oberklassen-Methode
super.print(); //print der Oberklasse
System.out.println //zusätzliche Zeile
("Legi-Nummer: " + legiNummer);
}
VE RERB UN G
Jede Methode der Oberklasse steht auch in der abgeleiteten Methode zur Verfügung
Konstruktoren werden nicht vererbt/überschrieben → Konstr. der Oberklasse wird automatisch aufgerufen wenn abgeleitete Klasse initalisiert wird
AUFBAU UNT ERK LASS E
Oberklasse muss erweitert werden mit extends class DozentIn extends Person {
private final String personalNummer;
DozentIn (String v, String n, String p) {
// Aufruf des Konstruktors der Oberklasse
super (v, n);
personalNummer = p;
}
// Ueberschreibt die Oberklassen-Methode
public void print() {
// Aufruf der Oberklassen-Methode
super.print();
System.out.println
("Personal-Nummer: " + personalNummer);
}}
Hier kein Default-Konstruktur
ABSTRAK T E KLAS SE N
Klassen die für Hirarchie gebruacht werden, von denen aber keine Objekte erzeugt werden sollen
CASTI NG
Jedes Objekt einer abgeleteten Klasse kann als Objekt der Oberklasse aufgefasst werden (upcasting), bleibt aber Objekt der abgeleiteten Klasse
Ein Objekt der Oberklasse (das eigentlich abg. Klasse ist, zb durch kopieren Referenz) kann durch explizites Downcasten als Objekt der urspr. abgeleiteten Klasse aufgefasst werden.
→ Casting auf gleicher Stufe und nach oben möglich, Casting nach unten nicht möglich
GRAF IK EN M IT AWT
Mit Ableitungen (extends) von vorgegebenen Klassen
Unabhängig von Betriebssystem
Benötigen Bibliotheken
KOMP ONE NT E N
Elementare: Button, Auswahlliste, textfeld, Scrollbar Behälter: Frame zum anordnen von elementaren Komponenten
DARST ELLU NG
Anordnung der Komponenten
EREIG NISS T EU ER E UNG
Im Hintergrund laufen Listener, die auf Benutzarktivität warten Bei Ereignis werden diese aktiv → Aktionen ausführen
Benutzereingaben
Beobachter
AUFBAU
→ Siehe Beispiel
GRAFIKBEF E HLE public void paint(Graphics g) {..}
g.drawLine(x1, y1, x2, y2); // APkt,EPkt
g.drawOval(x, y, width, height);
//Ellipse mit linker oberer Ecke
g.drawRect(x, y, width, height);
//Rechteck mit linker oberer Ecke
g.drawString(string, x, y);
// Zeichenkette beginnt an Stelle x,y
g.setColor(Color.magenta)
Funktioniert wie AutoCAD → aktuelle Farbe ect. gesetzt
ANW E NDU NG A PPL ETS ( AWT )
JAVA -APP LETS:
Plattformunabhängig
Benötigt Browser um zu funktionieren
Benötigt Internetseite die Applet aufruft
Laufen beim Client in Sandbox (Sicherheit)
Keine Main sindern init-Methode
public class … extends java.applet.Applet,… <HTML>
<TITLE>Mein erstes Applet</TITLE>
<BODY>
<APPLET code=”MyApplet.class” width=400
height=200>
</APPLET>
</BODY>
</HTML>
LEBE NS ZY K LU S:
Instanziierung mithilfe Konstruktor Applet() der Superklasse
Initialisierung public void init(); wird genau einmal aufgerufen
Start mit public void start(); (geht auch mehrfach)
Zeichnen (regen) mit paint(Graphics g); //oder repaint
Verlassen der Website: public void stop();
Verlassen des Browsers: public void destroy();
EREIG NISS T EU ER U NG Programm in „Endlosschlaufe“ und wartet auf Benutzereingabe Sobald ein Ereignis/Event auftritt wird entsprechende Methode aufgerufen mit actionPerformed
STR EA MS
Streams sind UNI-Code basiert (als Bitmuster)
Ein und Ausgabe erfolgt Zeichenweise
import java.io.*; verwenden
Input mittels Tastatur, Maus, Datei… Output über Konsole mit Zeichenweiser Darstellung
import java.io.*;
public class LesenSchreiben {
public static void main(String [ ] args)
throws Exception { InputStream eingabe = new FileInputStream
("yesterday.txt");
OutputStream ausgabe = new FileOutputStream
("tomorrow.txt");
for (;;) {
int unicode = System.in.read();
System.out.write(unicode);
}}}
EI NGABE I N K ONSOLE java Spracherkennung < yesterday.txt
Eingabe wird in Form von Datei in System.in.read() umgeleitet
BILBL IOTH EK EN
Dazu muss man am Anfang der Datei diese Importieren
GRAFISCH E OB ERF LÄCH E N import javax.swing.*;
int b = Integer.parseInt(JOptionPane
.showInputDialog("Name? :"));
JOptionPane.showMessageDialog(null, b
+ ", Hallo");
ARRAYS import java.util.Arrays;
java.util.Arrays.sort(array2);
System.out.println(Arrays.toString(array1));
KLASSE ND IA GRAM M:
Aus Name/Datenfelder/Methoden
FEHLE R IN PR OGR AM ME N
SY NTA XF EH LER
→ Erkennung durch Editor/Compiler
LAU FZ EIT FE H LER
Treten während Programmablauf auf. → Ungültige Werte / Eingaben
E NTW URFSF E HLER
Programm läuft wie es programmiert ist, aber nicht so wie gewünscht. → Debugging
QUELLEN Vorlesungsunterlagen B. Waldvogel, B, Gärtner, ETHZ
Eigene erstellte Dokumente
Einführung in die Informatik, Gumm/Sommer
Einträge in Wikipedia
ANWENDUNGS-BEISPIELE
DER KL E INE G AU SS
Summenformel:
public class Gauss{
// Summe der ersten 100 natuerlichen Zahlen
public static void main(String [] args){
int s = 0;
for (int i=1; i<=100; ++i){ // ++i heisst
i = i + 1
s += i; // s = s + i
}
System.out.println(s);
}}
COLLAT Z F OLG E
Folge:
Collatzfolge wird repetitiv, sobald Zahl 1 erscheint public class Collatz {
static void collatz(int n) {
System.out.print(n + " ");
if (n == 1) return;
else if (n % 2 == 0) collatz(n / 2);
else collatz(3*n + 1);
}
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
collatz(N);
System.out.println();
}}
Endlosschlaufe wenn 1 nicht erreicht würde.
ZUFALL SZ AHLE N
LI NEAR E K ONGRU E NZM ET H OD E public class Zufall{
// berechne eine Folge von Zufallszahlen, abhaengig von
einem
// eingegebenen Startwert
public static void main(String [] args){
int x0 = Integer.parseInt(args[0]);
// Startwert als Eingabeparameter
int a = 137; // Multiplikator
int c = 187; // Verschiebung
int m = 256; // Modulus
int x = x0; // aktueller Wert
for (int i=0; i<=256; ++i) {
x = (a * x + c) % m; // naechster Wert
System.out.println(x);
}}}
WÜRF EL public class Wuerfel{
public static void main(String [] args){
for (int i=0; i<50; i++){ // 50x würfeln
double d=Math.random(); // d=[0,1)
d=d*6+1; // d=[1-7)
int f=(int)d; // d=[1,2..,6]
System.out.println(f);
}}}
GGT public class Ggt {
// berechne GGT zweier Zahlen a und b
public static void main(String[] args){
// lies die Zahlen von der Kommandozeile
int a = Integer.parseInt (args[0]);
int b = Integer.parseInt (args[1]);
// Aufruf der ggt-Funktion und Ausgabe
System.out.println("ggT (" + a + ", " + b
+ ") = " + ggT(a,b));
}
// Euklidischer Algorithmus
public static int ggT (int a, int b) {
while (b != 0) {
// ersetze (a,b) durch (b, a % b)
int a_alt = a; // a merken
a = b; // ersetze a durch b
b = a_alt % b; // ersetze b durch a % b
}
return a;
}}
Informatik I+II Basisprüfung ETHZ – BAUG – Semester 1+2
06. August 2011 S e i t e | 8 Christoph Hager
S IEB E RAT O STH ET EN E S – PR IMZ AH LEN public class Eratosthenes{
// berechne alle Primzahlen in {2,...,n-1}
public static void main(String [] args){
int n = Integer.parseInt(args[0]);
// Array, das jeweils angibt, ob eine Zahl
schon ausgestrichen wurde
boolean[] ausgestrichen = new boolean[n];
for (int i = 0; i < n; ++i)
ausgestrichen[i] = false;
// Sieb
System.out.println ("Berechnung...");
for (int i = 2; i < n; ++i)
if (!ausgestrichen[i]) {
// i ist Primzahl; streiche alle echten
Vielfachen aus
for (int m = 2*i; m < n; m += i)
ausgestrichen[m] = true;
}
// Ausgabe
System.out.println("Primzahlen in {2,...," + (n-1) +
"}: ");
for (int i=2; i < n; ++i)
if (!ausgestrichen[i])
System.out.print (i + ", ");
System.out.println("fertig!");
}}
STR ING S public class StringTest {
public static void main(String[] args){
String s0 = "abcdef";
String s1 = s0.substring(3,5);
System.out.println(s1); // de
String s2 = s0.concat("ghia");
System.out.println(s2); // abcdefghia
String s3 = s2.replace ('a','A');
System.out.println(s3); // AbcdefghiA
System.out.println(s3.length()); // 10
String s4 = s3;
System.out.println(s3.compareTo(s4)); // 0
System.out.println(s3.compareTo(s2));
// <0, weil s2 lex.(UnicodeNr) kleiner
}}
VE RERB UN G public class Baum{
public static void main(String[] args) {
Buche meinBaum = new Buche("meinBaum");
Tanne weihnachtsbaum = new
Tanne("Weihnachtsbaum");
meinBaum.erkennbar_an();
weihnachtsbaum.erkennbar_an();
BaumArt irgendeinBaum;
irgendeinBaum= new Buche("Hexenbaum");
irgendeinBaum.erkennbar_an();
}}
//Abstrakte Klasse Baumart
public abstract class BaumArt {
private String name;
public BaumArt(String b_name){
name=b_name;
}
public abstract void erkennbar_an();
}
// Unterklasse Buche
public class Buche extends BaumArt {
public Buche(String b_name) {
super(b_name);
}
public void erkennbar_an(){
System.out.println("Buchecken");
}}
// Unterklasse Tanne
public class Tanne extends BaumArt {
public Tanne(String t_name){
super(t_name);
}
public void erkennbar_an(){
System.out.println("Nadeln");
}}}
Separate Files!
GER AD E U NG ER AD E if (i % 2 == 1) … \\ungerade
if (i % 2 == 0) … \\gerade
GEM ETR IE O O public class Geometrie {
public static void main(String[] args) {
Punkt p = new Punkt (3.0, 2.0);
Kreis k = new Kreis (p, 5.0);
Punkt ursprung = new Punkt();
System.out.println ("Flaeche von k = " + k.flaeche());
System.out.println ("Umfang von k = " + k.umfang());
System.out.println ("Enthaelt k den Ursprung? " +
k.enthaelt (ursprung));
}}
// Klasse fuer (nichtmodifizierbare) Punkte
class Punkt {
private final double xKoordinate;
private final double yKoordinate;
// POST: erzeugt den Nullpunkt
public Punkt () {
xKoordinate = 0.0;
yKoordinate = 0.0;
}
// POST: erzeugt den Punkt (x,y)
public Punkt (double x, double y) {
xKoordinate = x;
yKoordinate = y;
}
public double getX() {
return xKoordinate;
}
public double getY() {
return yKoordinate; }}
// Klasse fuer (nichtmodifizierbare) Kreise
class Kreis {
private final Punkt mittelpunkt;
private final double radius;
static private final double PI = Math.PI;
static private final double ZWEIPI = 2.0*Math.PI;
// POST: erzeugt einen Einheitskreis
public Kreis () {
mittelpunkt = new Punkt ();
radius = 1.0;
}
// PRE: r >= 0.0
// POST: erzeugt Kreis mit M c und r
public Kreis (Punkt c, double r) {
assert (r >= 0.0);
mittelpunkt = c;
radius = r;
}
public Punkt getMittelpunkt () {
return mittelpunkt;
}
public double getRadius () {
return radius;
}
public boolean enthaelt (Punkt p) {
double dx = p.getX() - mittelpunkt.getX();
double dy = p.getY() - mittelpunkt.getY();
return (dx*dx + dy*dy <= radius*radius);
}
public double flaeche () {
return PI*radius*radius;
}
public double umfang () {
return ZWEIPI*radius; }}
FEHLE RBEH AN DLUN G // Fehlerbehandlung
if (args.length != 1) { // 1 Arg?
System.out
.println("Positive Ganzzahl!");
return;
}
int x = 0; // Definiere x
try // Kontrolle ob Argument Ganzzahl ist
{
x = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.out.println("'" + args[0]
+ "' keine Ganzzahl oder zu gross.");
return;
}
if (x < 0) { // Kontrolle ob Arg positiv ist
System.out.println("Ganzzahl positiv!");
return;
}
if (x == 0) { // Kontrolle ob Argument 0 ist
System.out.println("Du bist hier Null.");
return;
}
AWT Z IC KZAC KLIN IE import java.awt.*;
import java.awt.event.*;
public class LinienZickzack {
public static void main (String args[]) {
// Mache ein Grafikfenster auf
MeinFrame f = new MeinFrame();
}}
class MeinFrame extends Frame {
// Konstruktor; ruft Methoden
// der Oberklasse Frame auf
MeinFrame () {
// Breite und Hoehe in Pixeln
setSize (300, 400);
// Abstand von linker oberer Ecke in Pixeln
setLocation (100, 100);
// Sichtbarmachung
setVisible (true);
// Beobachter hinzufuegen
addWindowListener (new SchliessknopfBeobachter());
}
// Ueberschreibe die paint-Methode der Oberklassse
// Component
public void paint (Graphics g) {
int xNeu;
int xAlt;
int yNeu;
int yAlt;
final int BREITE = 100;
final int HOEHE = 20;
xAlt=0; yAlt=30; // x0, y0
for (int i=1; i<19; ++i) {
if (i % 2 == 1)
xNeu = xAlt + BREITE;
else
xNeu = xAlt - BREITE;
yNeu = yAlt + HOEHE;
g.drawLine(xAlt, yAlt, xNeu, yNeu);
xAlt = xNeu;
yAlt = yNeu;
}}}
class SchliessknopfBeobachter extends WindowAdapter {
// schliesst das Fenster
public void windowClosing (WindowEvent e) {
System.exit(0);
}}
JA V A-A PPLE T M IT AWT import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class WuerfelApplet extends Applet {
private final int ABSTAND = 60;
private final int GROESSE = ABSTAND/2;
private final Wuerfel w;
// Konstruktor
public WuerfelApplet () {
w = new Wuerfel (this);
addMouseListener (w);
setSize (4*ABSTAND, 4*ABSTAND);
}
// Zeichnen des Wurfes
public void paint (Graphics g) {
g.setColor (Color.white);
g.fillRect (0,0,3*ABSTAND, 3*ABSTAND);
g.setColor (Color.black);
switch (w.getAugenzahl()) {
case 5:
auge (g, 2, 0); auge (g, 0, 2);
case 3:
auge (g, 0, 0); auge (g, 2, 2);
case 1:
auge (g, 1, 1);
break;
case 6:
auge (g, 1, 0); auge (g, 1, 2);
case 4:
auge (g, 2, 0); auge (g, 0, 2);
case 2:
auge (g, 0, 0); auge (g, 2, 2);
}}
// Flimmervermeidung
public void update (Graphics g) {
paint(g);
}
// Zeichnen eines Auges
private void auge (Graphics g, int x, int y) {
g.fillOval (x*ABSTAND+GROESSE/2, y*ABSTAND+GROESSE/2,
GROESSE, GROESSE);
}}
//neue Datei
import java.awt.*;
import java.awt.event.*;
public class Wuerfel extends MouseAdapter {
// Datenfeld fuer die Augenzahl und das Applet
private int augenzahl; // 1..6
private WuerfelApplet a;
// Konstruktor: einmal wuerfeln...
public Wuerfel (WuerfelApplet applet) {
a = applet;
wuerfeln();
}
// Mausklick: einmal wuerfeln...
public void mouseClicked (MouseEvent e) {
wuerfeln(); // neuer Wurf
a.repaint(); // Applet bescheid sagen: Neu zeichnen!
}
// einmal wuerfeln...
public void wuerfeln() {
augenzahl = (int)(6 * Math.random() + 1);
}
// Getter fuer die Augenzahl
public int getAugenzahl() {
return augenzahl;
}}
SPR ACH ERK EN NU NG import java.io.*;
public class Spracherkennung {
static double[] englischProfil = {XXX};
static double[] deutschProfil = {XXX};
static double[] italienischProfil = {XXX};
// Sprachenliste
static double[][] sprachenProfil = {
englischProfil, // 0
deutschProfil, // 1
italienischProfil, // 2
};
// POST: gibt Namen der Sprache i aus
public static String name (int i) {
switch (i) {
case 0: return new String("Englisch");
case 1: return new String("Deutsch");
case 2: return new String("Italienisch");
default: return new String("unbekannte Sprache");
}
}
// POST: berechnet Abweichung Text- von Sprachenprofil
// im quadratischen Abstand der Haeufigkeitsprofile
public static double abweichung (double[] t, double[] s) {
double a = 0.0;
for (int i=0; i<26; ++i)
a += (t[i]-s[i])*(t[i]-s[i]);
return a;
}
public static void main (String[] args) throws Exception {
// Haeufigkeitsprofil fuer den zu lesenden Text erstellen
double[] t = new double[26];
for (int i=0; i<26; ++i)
t[i] = 0;
// Text einlesen und Buchstaben (absolut) zaehlen
int buchstabenAnzahl = 0;
for (;;) {
int unicode = System.in.read(); // naechstes Zeichen
if (unicode == -1) break; // -1 = Textende
if (65 <= unicode && unicode < 91) { // A-Z
++t[unicode-65]; // 'A' = 0, 'B' = 1, ...
++buchstabenAnzahl;
}
if (97 <= unicode && unicode < 123) { // a-z
++t[unicode-97]; // 'a' = 0, 'b' = 1, ...
++buchstabenAnzahl;
}}
// Hauefigkeitsprofil berechnen
for (int i=0; i<26; ++i)
t[i] = 100.0 * t[i] / buchstabenAnzahl;
// Spracherkennung
double minAbweichung = Double.MAX_VALUE;
int erkannteSprache = 0;
for (int i=0; i<sprachenProfil.length; ++i) {
double a = abweichung (t, sprachenProfil[i]);
System.out.println ("Abweichung von " + name (i) + " =
" + (int)a);
if (a < minAbweichung) {
minAbweichung = a;
erkannteSprache = i;
}}
System.out.println ("Fazit: Das ist " + name
(erkannteSprache) + "!");
}}