Vorbereitung auf die Prüfung

Werbung
Vorbereitung auf die Prüfung
Arthur Zaczek
Jän 2015
Vorbereitung auf die Prüfung
1
Einleitung
1.1
Inhalt
• Dieses Dokument soll Ihnen helfen, sich besser auf die Prüfung vorzubereiten.
• Es wird der Inhalt der LV mit der Übung verglichen.
• Einzelne Aspekte werden nochmals hervorgehoben
Das bedeutet nicht, dass der Inhalt dieses Dokumentes so zur Prüfung geben
wird!
2
2.1
Interfaces
Definieren
public interface Url {
/**
* @return Returns the path of the url, without parameter.
*/
String getPath();
}
public interface IUrl
{
/// <summary>
/// Returns the path of the url, without parameter.
/// </summary>
string Path { get; }
}
2.2
Implementieren
public class UrlImpl implements Url {
@Override
public String getPath() {
...
}
}
public class UrlImpl : IUrl
{
public string Path
{
get { return _path; }
}
}
1
Vorbereitung auf die Prüfung
2.3
Polymorphismus
Url url = new UrlImpl();
IUrl url = new UrlImpl();
Die Implementierung der Url ist (auch) vom Typ Url bzw. IUrl
Dadurch wird die konkrete Implementierung vom verlangten Typ entkoppelt.
2.4
Typen
Collection<String> lst = new ArrayList<String>();
Collection<String> lst = new LinkedList<String>();
Url url = new ArthursUrl();
Url url = new AlexandersUrl();
Url url = new SebastiansUrl();
ICollection<String> lst = new List<String>();
ICollection<String> lst = new LinkedList<String>();
IUrl url = new ArthursUrl();
IUrl url = new AlexandersUrl();
IUrl url = new SebastiansUrl();
Die Instanz lst ist sowohl vom Typ ArrayList bzw. List als auch vom Interface Typ Collection bzw. ICollection Die Instanz url ist sowohl vom Typ
ArthursUrl als auch vom Interface Typ Url bzw. IUrl
3
3.1
Klassen
Definieren
public class Response {
}
public class Response
{
}
3.2
Methoden
public class Response {
public void addHeader() {
...
}
}
2
Vorbereitung auf die Prüfung
public class Response
{
public void AddHeader()
{
...
}
}
3.3
Eigenschaften / Properties
public class Response {
public int getStatusCode() {
}
public void setStatusCode(int status) {
}
}
public class Response
{
public int StatusCode
{
get;
set;
}
}
3.4
Ableiten
Ein BasePlugin stellt Basisfunktionalität zur Verfügung.
public class FilePlugin extends BasePlugin {
}
public class FilePlugin : BasePlugin {
}
3.5
BasePlugin
public class BasePlugin {
public string getName() { ... }
public string getDescription() { ... }
protected Configuration getConfig() { ... }
protected void log(string msg) { ... }
}
public class BasePlugin
{
public virtual string Name { get { ... } }
3
Vorbereitung auf die Prüfung
public virtual string Description { get {
... } }
protected Configuration Config { get{ ... } }
protected void Log(string msg) { ... }
}
3.6
Beschreibung BasePlugin
• Die Eigenschaften Name & Description können auch von einem Interface definiert werden.
– Diese könnten von einem Plugins Plugin genutzt werden, um Plugins zu verwalten
– Im Logfile könnte die Eigenschaft Name mitgeschrieben werden
3.7
Beschreibung BasePlugin
• Die Eigenschaften Config vom Typ Configuration speichert eine Instanz der aktuellen
Konfiguration.
–
–
–
–
3.8
Basispfad
Pluginpfad
Inhalt der Konfigurationsdatei
etc.
Beschreibung BasePlugin
• Die Methode log bzw. Log sorgt für ein einheitliches Format im Logfiles aller Plugins
3.9
Typen
FilePlugin p = new FilePlugin();
BasePlugin p = new FilePlugin();
Plugin p = new FilePlugin();
FilePlugin p = new FilePlugin();
BasePlugin p = new FilePlugin();
IPlugin p = new FilePlugin();
Die Instanz p ist sowohl vom Typ FilePlugin als auch vom Typ BasePlugin
als auch vom Interface Typ Plugin bzw. IPlugin
3.10
Java Beispiele
java.io.InputStream
java.io.FilterInputStream
java.io.BufferedInputStream
java.util.AbstractCollection<E>
4
Vorbereitung auf die Prüfung
java.util.AbstractList<E>
java.util.ArrayList<E>
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.IllegalArgumentException
java.lang.NumberFormatException
3.11
C# Beispiele
System.MarshalByRefObject
System.IO.Stream
System.IO.FileStream
System.Exception
System.SystemException
System.ArgumentException
System.ArgumentNullException
3.12
Überschreiben
In einer Abgeleiteten Klasse wird eine Methode oder Eigenschaft neu implementiert, um die
Funktionalität zu verändern oder zu ergänzen.
public class FilePlugin extends BasePlugin {
@Override
public string getName() { ... }
@Override
public string getDescription() { ... }
}
public class FilePlugin : BasePlugin
{
public override string Name { get { ... } }
public override string Description { get { ... } }
}
3.13
Überladen
Eine Methode mit dem gleichen Namen, aber anderen Parametern. Sinnvollerweise sollte das
Verhalten gleich sein und sich nur durch die Argumente unterscheiden.
public class BasePlugin {
// Nachricht protokollieren mit LogLevel.INFO
protected void log(string msg) { ... }
// Nachricht protokollieren mit übergebenen LogLevel
protected void log(LogLevel level, string msg) { ... }
}
5
Vorbereitung auf die Prüfung
public class BasePlugin
{
// Nachricht protokollieren mit LogLevel.INFO
protected void Log(string msg) { ... }
// Nachricht protokollieren mit übergebenen LogLevel
protected void Log(LogLevel level, string msg) { ... }
}
3.14
Alles zusammen
public interface Plugin {
string getName();
}
public abstract class BasePlugin implements Plugin {
public string getName() { ... }
protected void log(string msg) { ... }
protected void log(LogLevel level, string msg) { ... }
}
public class FilePlugin extends BasePlugin {
@Override
public string getName() { ... }
}
Plugin p = new FilePlugin();
BasePlugin p = new FilePlugin();
FilePlugin p = new FilePlugin();
3.15
Alles zusammen
public interface IPlugin
{
string Name { get; }
}
public abstract class BasePlugin : IPlugin
{
public virtual string Name { get { ... } }
protected void log(string msg) { ... }
protected void log(LogLevel level, string msg) { ... }
}
public class FilePlugin : BasePlugin
{
public override string Name { get { ... } }
}
Plugin p = new FilePlugin();
BasePlugin p = new FilePlugin();
FilePlugin p = new FilePlugin();
6
Vorbereitung auf die Prüfung
4
Abstrakte Klassen
4.1
Definieren
public abstract class BasePlugin {
public abstract string getName();
public abstract string getDescription();
}
public abstract class BasePlugin
{
public abstract string Name { get; }
public abstract string Description { get; }
}
4.2
Auswirkung
• Diese Klassen können nicht instanziiert werden.
• Ableiter sind gezwungen, abstrakte Methoden & Eigenschaften zu implementieren.
• Eine Implementierung kann wie bei gewöhnlichen zur Verfügung gestellt werden.
Abstrakte Klassen vereinen die Eigenschaften von Interfaces und
Basisklassen
4.3
Typen
Java und C#
BasePlugin p = new FilePlugin();
5
5.1
Interfaces, abstrakte Klassen, Klassen und Arrays
Array mit Interface
Url a[] = new Url[3];
a[0] = new ArthursUrl();
a[1] = new AlexandersUrl();
a[2] = new SebastiansUrl();
IUrl
a[0]
a[1]
a[2]
a[] =
= new
= new
= new
new IUrl[3];
ArthursUrl();
AlexandersUrl();
SebastiansUrl();
Dieses Array beinhaltet 3 unterschiedliche Klassen, die alle das Interface Url
bzw. IUrl implementieren.
7
Vorbereitung auf die Prüfung
5.2
Array mit abstrakter Klassen
BasePlugin
a[0] = new
a[1] = new
a[2] = new
a[] = new BasePlugin[3];
FilePlugin();
TemperaturePlugin();
ToUpperPlugin();
BasePlugin
a[0] = new
a[1] = new
a[2] = new
a[] = new BasePlugin[3];
FilePlugin();
TemperaturePlugin();
ToUpperPlugin();
Dieses Array beinhaltet 3 unterschiedliche Klassen, die alle das Interface Url
bzw. IUrl implementieren.
5.3
Array mit Klassen
. . . you got the point!
6
6.1
Streams
Java
// schreiben
ByteArrayOutputStream s = new ByteArrayOutputStream();
DataOutputStream sw = new DataOutputStream(s);
sw.writeUTF("Lore ipsum");
sw.writeInt(1234);
// in ein byte[] konvertieren
byte[] byteArray = s.toByteArray();
// wieder aus dem byte[] auslesen
InputStream inputStream = new ByteArrayInputStream(byteArray);
DataInputStream sr = new DataInputStream(s);
String str = sr.readUTF();
int i = sr.readInt();
6.2
CS
// schreiben
var ms = new MemoryStream();
var sw = new BinaryWriter(ms);
sw.Write("Lore ipsum");
sw.Write(1234);
// Stream zurück an den Anfang setzen
8
Vorbereitung auf die Prüfung
ms.Seek(0, SeekOrigin.Begin);
// wieder aus dem Stream auslesen
var sr = new BinaryReader(ms);
var str = sr.ReadString();
var i = sr.ReadInt32();
7
7.1
Tipps
Javas secret Array Class
List<BasePlugin> lst = Arrays.asList(new FilePlugin(), new ToUpperPlugin(), new TemperaturePlugin(
7.2
C# list initializer
List<BasePlugin> lst = new List<BasePlugin>()
{
new FilePlugin(),
new ToUpperPlugin(),
new TemperaturePlugin()
};
9
Herunterladen