diff --git a/documents/Programmierparadigmen/Parallelitaet.tex b/documents/Programmierparadigmen/Parallelitaet.tex index 41236c5..88fa249 100644 --- a/documents/Programmierparadigmen/Parallelitaet.tex +++ b/documents/Programmierparadigmen/Parallelitaet.tex @@ -140,4 +140,48 @@ Semaphoren können eingesetzt werden um Wettlaufsituationen zu verhindern. Bedingung ist. \end{definition} +Monitore können mit einer Semaphore, bei der $c=1$ ist, implementiert werden. +Monitore sorgen dafür, dass auf die Methoden der Objekte, die sie repräsentieren, +zu jedem Zeitpunkt nur ein mal ausgeführt werden können. Sie sorgen also für +\textit{gegenseitigen Ausschluss}. + +\begin{beispiel}[Monitor] + Folgendes Beispiel von \url{https://en.wikipedia.org/w/index.php?title=Monitor_(synchronization)&oldid=596007585} verdeutlicht den Nutzen eines Monitors: + +\begin{verbatim} +monitor class Account { + private int balance := 0 + invariant balance >= 0 + + public method boolean withdraw(int amount) + precondition amount >= 0 + { + if balance < amount: + return false + else: + balance := balance - amount + return true + } + + public method deposit(int amount) + precondition amount >= 0 + { + balance := balance + amount + } +} +\end{verbatim} +\end{beispiel} + +\section{Parallelität in Java} +Java unterstützt mit der Klasse \texttt{Thread} und dem Interface \texttt{Runnable} +Parallelität. + +Interessante Stichwörder sind noch: +\begin{itemize} + \item ThreadPool + \item Interface Executor + \item Interface Future + \item Interface Callable +\end{itemize} + \index{Parallelität|)} \ No newline at end of file diff --git a/documents/Programmierparadigmen/Programmierparadigmen.pdf b/documents/Programmierparadigmen/Programmierparadigmen.pdf index 747074f..450b98b 100644 Binary files a/documents/Programmierparadigmen/Programmierparadigmen.pdf and b/documents/Programmierparadigmen/Programmierparadigmen.pdf differ diff --git a/documents/Programmierparadigmen/Scala.tex b/documents/Programmierparadigmen/Scala.tex index 51cea71..eaf00c7 100644 --- a/documents/Programmierparadigmen/Scala.tex +++ b/documents/Programmierparadigmen/Scala.tex @@ -2,10 +2,75 @@ \index{Scala|(} Scala ist eine funktionale Programmiersprache, die auf der JVM aufbaut -und in Java Bytecode kompiliert wird. +und in Java Bytecode kompiliert wird. Scala bedeutet \underline{sca}lable +\underline{la}nguage. + +Mit sog. \enquote{actors} bietet Scala eine Unterstützung für die Entwicklung +prallel ausführender Programme. + +Weitere Materialien sind unter \url{http://www.scala-lang.org/} und +\url{http://www.simplyscala.com/} zu finden. + +\section{Erste Schritte} +Scala kann auf Debian-basierten Systemen durch das Paket \texttt{scala} installiert +werden. + +\subsection{Hello World} +\subsubsection{Interaktiv} +Folgendes Beispiel stammt von \url{http://wiki.ubuntuusers.de/Scala}. +\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=scala-test.scala]{scala}{scripts/scala/scala-test.scala} +Es kann mit \texttt{./scala-test.scala Scala funktioniert} ausgeführt werden. + +\subsubsection{Kompiliert} +\inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=hello-world.scala]{scala}{scripts/scala/hello-world.scala} + +Dieses Beispiel kann mit \texttt{scalac hello-world.scala} kompiliert und mit +\texttt{scala HelloWorld} ausgeführt werden. + +\section{Vergleich mit Java} +Scala und Java haben einige Gemeinsamkeiten, wie den Java Bytecode, aber auch +einige Unterschiede. + +\noindent\parbox[t]{2.4in}{\raggedright% +\textbf{\textit{Gemeinsamkeiten}} +\begin{itemize}[topsep=0pt,itemsep=-2pt,leftmargin=13pt] + \item Java Bytecode + \item Keine Mehrfachvererbung + \item Statische Typisierung + \item Scopes +\end{itemize} +}% +\parbox[t]{2.4in}{\raggedright% +\textbf{\textit{Unterschiede}} +\begin{itemize}[topsep=0pt,itemsep=-2pt,leftmargin=13pt] + \item Java hat Interfaces, Scala hat traits. + \item Java hat primitive Typen, Scala ausschließlich Objekte. + \item Scala benötigt kein \texttt{;} am Ende von Anweisungen. +\end{itemize} +} + +Weitere Informationen hat Graham Lea unter \url{http://grahamhackingscala.blogspot.de/2009/11/scala-under-hood-of-hello-world.html} zur Verfügung gestellt. \section{Syntax} +In Scala gibt es sog. \textit{values}, die durch das Schlüsselwort \texttt{val}\xindex{val} +angezeigt werden. Diese sind Konstanten. Die Syntax ist der UML-Syntax ähnlich. + +\begin{verbatim} +val name: type = value +\end{verbatim} + +Variablen werden durch das Schlüsselwort \texttt{var}\xindex{var} angezeigt: + +\begin{verbatim} +var name: type = value +\end{verbatim} + +Methoden werden mit dem Schlüsselwort \texttt{def}\xindex{def} erzeugt: + +\begin{verbatim} +def name(parameter: String): Unit = { code body... } +\end{verbatim} + \section{Beispiele} -\index{Scala|)} - +\index{Scala|)} \ No newline at end of file diff --git a/documents/Programmierparadigmen/Vorwort.tex b/documents/Programmierparadigmen/Vorwort.tex index f114d6a..7fab43e 100644 --- a/documents/Programmierparadigmen/Vorwort.tex +++ b/documents/Programmierparadigmen/Vorwort.tex @@ -1,9 +1,10 @@ %!TEX root = Programmierparadigmen.tex \chapter*{Vorwort} Dieses Skript wird/wurde im Wintersemester 2013/2014 -von Martin Thoma zur Vorlesung von Prof.~Dr.~Snelting geschrieben. Dazu wurden -die Folien von Prof.~Dr.~Snelting benutzt, die Struktur sowie einige Beispiele, -Definitionen und Sätze übernommen. +von Martin Thoma zur Vorlesung von Prof.~Dr.~Snelting und Jun.-Prof.~Dr.~Hummel +geschrieben. Dazu wurden +die Folien von Prof.~Dr.~Snelting und Jun.-Prof.~Dr.~Hummel benutzt, die Struktur +sowie einige Beispiele, Definitionen und Sätze übernommen. Das Ziel dieses Skriptes ist vor allem in der Klausur als Nachschlagewerk zu dienen; es soll jedoch auch diff --git a/documents/Programmierparadigmen/scripts/scala/HelloWorld$.class b/documents/Programmierparadigmen/scripts/scala/HelloWorld$.class new file mode 100644 index 0000000..e7601b7 Binary files /dev/null and b/documents/Programmierparadigmen/scripts/scala/HelloWorld$.class differ diff --git a/documents/Programmierparadigmen/scripts/scala/HelloWorld.class b/documents/Programmierparadigmen/scripts/scala/HelloWorld.class new file mode 100644 index 0000000..5dfddeb Binary files /dev/null and b/documents/Programmierparadigmen/scripts/scala/HelloWorld.class differ diff --git a/documents/Programmierparadigmen/scripts/scala/hello-world.scala b/documents/Programmierparadigmen/scripts/scala/hello-world.scala new file mode 100644 index 0000000..ac9b60e --- /dev/null +++ b/documents/Programmierparadigmen/scripts/scala/hello-world.scala @@ -0,0 +1,5 @@ +object HelloWorld { + def main(args: Array[String]) { + println("Hello World!") + } +} \ No newline at end of file diff --git a/documents/Programmierparadigmen/scripts/scala/scala-test.scala b/documents/Programmierparadigmen/scripts/scala/scala-test.scala new file mode 100755 index 0000000..3d00553 --- /dev/null +++ b/documents/Programmierparadigmen/scripts/scala/scala-test.scala @@ -0,0 +1,6 @@ +#!/usr/bin/env scala +!# +def promptprint (s: String) = {println ("> " + s)} + +println ("Hallo ") +args foreach promptprint \ No newline at end of file diff --git a/documents/Programmierparadigmen/scripts/scala/test.scala b/documents/Programmierparadigmen/scripts/scala/test.scala new file mode 100644 index 0000000..e69de29