diff options
author | Prabhu Ramachandran | 2017-11-17 23:03:18 +0530 |
---|---|---|
committer | Prabhu Ramachandran | 2017-11-17 23:03:18 +0530 |
commit | b64d87addfc4b90e3a2c93763eff8faf1e7cee21 (patch) | |
tree | 6cacdbfbebdb120ce3cc1c4a86453d635038f49d /advanced_python/oop_containership.tex | |
parent | 3b7ed43d8d159470654351c31a52f9edeaeaa60c (diff) | |
download | python-workshops-b64d87addfc4b90e3a2c93763eff8faf1e7cee21.tar.gz python-workshops-b64d87addfc4b90e3a2c93763eff8faf1e7cee21.tar.bz2 python-workshops-b64d87addfc4b90e3a2c93763eff8faf1e7cee21.zip |
Rename the files for easier navigation.
Diffstat (limited to 'advanced_python/oop_containership.tex')
-rw-r--r-- | advanced_python/oop_containership.tex | 164 |
1 files changed, 0 insertions, 164 deletions
diff --git a/advanced_python/oop_containership.tex b/advanced_python/oop_containership.tex deleted file mode 100644 index 5154a60..0000000 --- a/advanced_python/oop_containership.tex +++ /dev/null @@ -1,164 +0,0 @@ -\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} |