summaryrefslogtreecommitdiff
path: root/advanced_python/9_oop_containership.tex
diff options
context:
space:
mode:
Diffstat (limited to 'advanced_python/9_oop_containership.tex')
-rw-r--r--advanced_python/9_oop_containership.tex164
1 files changed, 164 insertions, 0 deletions
diff --git a/advanced_python/9_oop_containership.tex b/advanced_python/9_oop_containership.tex
new file mode 100644
index 0000000..5154a60
--- /dev/null
+++ b/advanced_python/9_oop_containership.tex
@@ -0,0 +1,164 @@
+\documentclass[14pt,compress,aspectratio=169]{beamer}
+
+\input{macros.tex}
+
+\title[OOP containership]{Advanced Python}
+\subtitle{Object Oriented Programming: containership }
+
+\author[FOSSEE] {The FOSSEE Group}
+
+\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
+\date[] {Mumbai, India}
+
+\begin{document}
+
+\begin{frame}
+ \titlepage
+\end{frame}
+
+\begin{frame}
+ \frametitle{Recap}
+ \begin{itemize}
+ \item Created \lstinline{Talk} and \lstinline{Tutorial} classes
+ \item Know how to create objects: instantiation of a class
+ \vspace*{0.5in}
+
+ \item Let us create a conference!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Conference class}
+ \vspace*{-0.1in}
+\begin{lstlisting}
+class Conference:
+ def __init__(self, talks=None):
+ if talks is None:
+ talks = []
+ self.talks = talks
+
+ def add_talk(self, talk):
+ self.talks.append(talk)
+
+ def schedule(self):
+ for talk in self.talks:
+ print(talk.speaker, talk.title)
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Using this}
+\begin{lstlisting}
+In []: c = Conference()
+
+In []: t = Talk('Guido', 'Python4', 'py,core')
+
+In []: c.add_talk(t)
+
+In []: c.schedule()
+
+\end{lstlisting}
+ \begin{itemize}
+ \item Easy to read
+ \item Nicely split up
+ \item Reflects the real world
+
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{But why not this?}
+\begin{lstlisting}
+class Conference:
+ def __init__(self, talks=[]):
+ self.talks = talks
+\end{lstlisting}
+ \begin{itemize}
+ \item Easier
+ \item Less code
+ \item Let's try it!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Gotcha!}
+\begin{lstlisting}
+In []: c1 = Conference()
+In []: c1.add_talk(1)
+In []: c1.talks
+
+In []: c2 = Conference()
+In []: c2.talks
+
+\end{lstlisting}
+
+ \begin{itemize}
+ \item What is going on?
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Beware of mutable default arguments!}
+ \begin{itemize}
+ \item Default arguments are evaluated once
+ \item When the method/function is defined
+ \item So, if the object is mutable we have a problem
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Which is why we have this}
+\begin{lstlisting}
+class Conference:
+ def __init__(self, talks=None):
+ if talks is None:
+ talks = []
+ self.talks = talks
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Containership}
+ \begin{itemize}
+ \item \lstinline{Conference} class manages all the talks
+ \item It contains the talks and tutorials
+ \item Allows us to build complexity by \alert{composition}
+ \item Hierarchical organization
+ \item Allows us to mirror the real objects in code
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Some more examples}
+ \begin{itemize}
+ \item OOP for a \lstinline{Company} class
+ \item OOP for a \lstinline{Bank}
+ \item OOP for a \lstinline{School} or \lstinline{College}
+ \item OOP for a cell phone, computer, ...
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Design guidelines}
+ \begin{itemize}
+ \item Important to make sense
+ \item Should be easy to explain the relationships and responsibilities of
+ each class
+ \item Inheritance should ``read'' correctly and make sense
+ \item No object should be too responsible
+ \item Functionality should be suitably delegated
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Summary}
+ \begin{itemize}
+ \item Creating a more complex class
+ \item Containing other objects
+ \item Issue with mutable default arguments
+ \item Important design guidelines
+ \end{itemize}
+\end{frame}
+
+
+\end{document}