You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

081 Begriffe.ipynb 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {
  6. "pycharm": {
  7. "name": "#%% md\n"
  8. },
  9. "slideshow": {
  10. "slide_type": "slide"
  11. }
  12. },
  13. "source": [
  14. "# Software Entwicklung \n",
  15. "\n",
  16. "## Kapitel 8: Objektorientierung\n",
  17. "\n",
  18. "### 8.1 Objekte\n",
  19. "\n",
  20. "Bisher haben wir *Daten* und *Funktionen* getrennt betrachtet.\n",
  21. "Bei einem Objekt werden Daten (auch: *Attribute*) und Funktionen\n",
  22. "(auch: *Methoden*) an einer Stelle zusammengefasst.\n",
  23. "\n",
  24. "Die Methoden eines Objekts können - neben lokalen Variablen, globalen Variablen\n",
  25. "und Parametern - auch die Attribute des Objekts nutzen. So kann\n",
  26. "z.B. ein Datumsobjekt die Attribute \"Jahr\", \"Monat\" und \"Tag\" besitzen\n",
  27. "und die Methoden des Objekts auf Basis dieser Attribute den\n",
  28. "Wochentag (0: Montag, ..., 6: Sonntag) ausrechnen oder eine standardisierte\n",
  29. "Stringrepräsentation generieren.\n",
  30. "\n",
  31. "![Datum-Objekt](../img/object.png \"Datum-Objekt\")"
  32. ]
  33. },
  34. {
  35. "cell_type": "markdown",
  36. "metadata": {
  37. "slideshow": {
  38. "slide_type": "slide"
  39. }
  40. },
  41. "source": [
  42. "Datumsobjektsobjekte können mit Hilfe des Standardmoduls <code>datetime</code>\n",
  43. "generiert werden. Die Methoden eines Objekts werden stets mit der Dot-Notation\n",
  44. "aufgerufen."
  45. ]
  46. },
  47. {
  48. "cell_type": "code",
  49. "execution_count": null,
  50. "metadata": {
  51. "pycharm": {
  52. "name": "#%%\n"
  53. }
  54. },
  55. "outputs": [],
  56. "source": [
  57. "import datetime\n",
  58. "\n",
  59. "d = datetime.date(1989, 11, 9)\n",
  60. "print(d.weekday())\n",
  61. "print(d.isoformat())"
  62. ]
  63. },
  64. {
  65. "cell_type": "markdown",
  66. "metadata": {
  67. "slideshow": {
  68. "slide_type": "slide"
  69. }
  70. },
  71. "source": [
  72. "### 8.2 Klassen\n",
  73. "\n",
  74. "Der Bauplan für Datumsobjekte, der die Attribute und Methoden festlegt,\n",
  75. "wird als *Klasse* bezeichnet. Das Standardmodul <code>datetime</code>\n",
  76. "enthält einen Bauplan für Datumsobjekte in Form der Klasse <code>date</code>.\n",
  77. "\n",
  78. "Objekte, die gemäß eines solchen\n",
  79. "Bauplans generiert wurden, haben die Klasse als Datentyp."
  80. ]
  81. },
  82. {
  83. "cell_type": "code",
  84. "execution_count": null,
  85. "metadata": {
  86. "pycharm": {
  87. "name": "#%%\n"
  88. }
  89. },
  90. "outputs": [],
  91. "source": [
  92. "print(type(d))"
  93. ]
  94. },
  95. {
  96. "cell_type": "markdown",
  97. "metadata": {
  98. "slideshow": {
  99. "slide_type": "slide"
  100. }
  101. },
  102. "source": [
  103. "### 8.3 Instanzen\n",
  104. "\n",
  105. "Der Bauplan, den eine Klasse bereitstellt, kann *mehrfach* benutzt werden, um\n",
  106. "mehrere Objekte zu erzeugen. Man spricht hier von *Instanzen* der Klasse."
  107. ]
  108. },
  109. {
  110. "cell_type": "code",
  111. "execution_count": null,
  112. "metadata": {
  113. "pycharm": {
  114. "name": "#%%\n"
  115. }
  116. },
  117. "outputs": [],
  118. "source": [
  119. "d1 = datetime.date(2000, 1, 1)\n",
  120. "d2 = datetime.date(2010, 1, 1)\n",
  121. "d3 = datetime.date(2020, 1, 1)"
  122. ]
  123. },
  124. {
  125. "cell_type": "markdown",
  126. "metadata": {},
  127. "source": [
  128. "Die Attribute der Instanzen sind voneinander unabhängig, d.h.\n",
  129. "anders als globale Variablen mehrfach vorhanden. Die Methoden, die\n",
  130. "ja stets mit der Dot-Notation für eine spezifische Instanz aufgerufen\n",
  131. "werden, nutzen die Attribute ihrer jeweiligen Instanz und liefern daher\n",
  132. "ggf. unterschiedliche Werte."
  133. ]
  134. },
  135. {
  136. "cell_type": "code",
  137. "execution_count": null,
  138. "metadata": {
  139. "pycharm": {
  140. "name": "#%%\n"
  141. }
  142. },
  143. "outputs": [],
  144. "source": [
  145. "print(d1.weekday())\n",
  146. "print(d2.weekday())\n",
  147. "print(d3.weekday())"
  148. ]
  149. },
  150. {
  151. "cell_type": "markdown",
  152. "metadata": {
  153. "slideshow": {
  154. "slide_type": "slide"
  155. }
  156. },
  157. "source": [
  158. "Welche Attribute und Methoden ein Objekt besitzt, ist normalerweise\n",
  159. "der Dokumentation oder dem Programmcode der Klasse zu entnehmen.\n",
  160. "Es gibt jedoch mit der Built-In-Funktion <code>dir</code> auch\n",
  161. "eine Möglichkeit, diese Information programmatisch zu ermitteln."
  162. ]
  163. },
  164. {
  165. "cell_type": "code",
  166. "execution_count": null,
  167. "metadata": {
  168. "pycharm": {
  169. "name": "#%%\n"
  170. }
  171. },
  172. "outputs": [],
  173. "source": [
  174. "print(dir(d1))"
  175. ]
  176. },
  177. {
  178. "cell_type": "markdown",
  179. "metadata": {},
  180. "source": [
  181. "Beim betrachteten Datumsobjekt *beginnen und enden* einige der Methoden-\n",
  182. "und Attributsnamen mit einem doppelten Unterstich <code>\\_\\_</code>, im\n",
  183. "Python-Jargon auch *dunder methods* bzw. *dunder attributs* genannt.\n",
  184. "Diese Methoden und Attribute werden vom Python-System verwendet und\n",
  185. "dürfen nicht überschrieben werden! Ein bereits bekanntes Beispiel ist\n",
  186. "die Variable <code>\\_\\_name\\_\\_</code>, die den aktuellen Modulnamen \n",
  187. "oder den Wert <code>\\_\\_main\\_\\_</code> enthält."
  188. ]
  189. },
  190. {
  191. "cell_type": "code",
  192. "execution_count": null,
  193. "metadata": {
  194. "pycharm": {
  195. "name": "#%%\n"
  196. }
  197. },
  198. "outputs": [],
  199. "source": [
  200. "print(__name__)"
  201. ]
  202. },
  203. {
  204. "cell_type": "markdown",
  205. "metadata": {
  206. "pycharm": {
  207. "name": "#%% md\n"
  208. }
  209. },
  210. "source": [
  211. "Auch die Definition eigener\n",
  212. "Funktionen und Variablen, die mit einem Doppel-Unterstich beginnen\n",
  213. "und enden, sollte vermieden werden. Es könnte andere Entwickler\n",
  214. "irritieren und System-Funktionen und -Variablen\n",
  215. "künftiger Python-Versionen verdecken."
  216. ]
  217. }
  218. ],
  219. "metadata": {
  220. "celltoolbar": "Slideshow",
  221. "kernelspec": {
  222. "display_name": "Python 3 (ipykernel)",
  223. "language": "python",
  224. "name": "python3"
  225. },
  226. "language_info": {
  227. "codemirror_mode": {
  228. "name": "ipython",
  229. "version": 3
  230. },
  231. "file_extension": ".py",
  232. "mimetype": "text/x-python",
  233. "name": "python",
  234. "nbconvert_exporter": "python",
  235. "pygments_lexer": "ipython3",
  236. "version": "3.9.9"
  237. }
  238. },
  239. "nbformat": 4,
  240. "nbformat_minor": 1
  241. }