2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-24 22:08:04 +02:00

Scala begonnen; Nachtrag zu Monitor / Semaphore

This commit is contained in:
Martin Thoma 2014-03-05 13:42:36 +01:00
parent a7fdba0c01
commit 408551e190
9 changed files with 127 additions and 6 deletions

View file

@ -140,4 +140,48 @@ Semaphoren können eingesetzt werden um Wettlaufsituationen zu verhindern.
Bedingung ist. Bedingung ist.
\end{definition} \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<V>
\item Interface Callable<V>
\end{itemize}
\index{Parallelität|)} \index{Parallelität|)}

View file

@ -2,10 +2,75 @@
\index{Scala|(} \index{Scala|(}
Scala ist eine funktionale Programmiersprache, die auf der JVM aufbaut 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} \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} \section{Beispiele}
\index{Scala|)} \index{Scala|)}

View file

@ -1,9 +1,10 @@
%!TEX root = Programmierparadigmen.tex %!TEX root = Programmierparadigmen.tex
\chapter*{Vorwort} \chapter*{Vorwort}
Dieses Skript wird/wurde im Wintersemester 2013/2014 Dieses Skript wird/wurde im Wintersemester 2013/2014
von Martin Thoma zur Vorlesung von Prof.~Dr.~Snelting geschrieben. Dazu wurden von Martin Thoma zur Vorlesung von Prof.~Dr.~Snelting und Jun.-Prof.~Dr.~Hummel
die Folien von Prof.~Dr.~Snelting benutzt, die Struktur sowie einige Beispiele, geschrieben. Dazu wurden
Definitionen und Sätze übernommen. 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 Das Ziel dieses Skriptes ist vor allem
in der Klausur als Nachschlagewerk zu dienen; es soll jedoch auch in der Klausur als Nachschlagewerk zu dienen; es soll jedoch auch

View file

@ -0,0 +1,5 @@
object HelloWorld {
def main(args: Array[String]) {
println("Hello World!")
}
}

View file

@ -0,0 +1,6 @@
#!/usr/bin/env scala
!#
def promptprint (s: String) = {println ("> " + s)}
println ("Hallo ")
args foreach promptprint