[{"data":1,"prerenderedAt":3410},["ShallowReactive",2],{"book-hierarchy":3,"content-query-CwYaLFRLGG":1073},[4,262,999],{"key":5,"slug":5,"title":6,"cleanTitle":6,"numberedTitle":7,"description":8,"path":9,"basePath":10,"filePath":11,"pageType":12,"hidden":13,"effectiveHidden":13,"order":14,"depth":14,"number":15,"ownAudience":16,"audiences":17,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":22},"01_programmierung","Programmierung","I Programmierung","Grundlagen der Programmierung.","/01_programmierung/de","/01_programmierung","content/01_Programmierung/de.md","chapter",false,1,"I","Sek I",[16],"cover-de-light.png","cover-en-light.png","cover-de-dark.png","cover-en-dark.png",[23,37,250],{"key":24,"slug":25,"title":26,"cleanTitle":26,"numberedTitle":27,"description":28,"path":29,"basePath":30,"filePath":31,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":33,"number":34,"ownAudience":16,"audiences":35,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":36},"01_programmierung/01_python","01_python","Python","I.1 Python","Einführung in die Programmiersprache Python.","/01_programmierung/01_python/de","/01_programmierung/01_python","content/01_Programmierung/01_Python/de.md","content",2,"I.1",[16],[],{"key":38,"slug":39,"title":40,"cleanTitle":40,"numberedTitle":41,"description":42,"path":43,"basePath":44,"filePath":45,"pageType":12,"hidden":13,"effectiveHidden":13,"order":33,"depth":33,"number":46,"ownAudience":16,"audiences":47,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":48},"01_programmierung/02_java","02_java","Java","I.2 Java","Objektorientierte Programmierung mit Java: von OOP-Grundlagen bis zu Projekten.","/01_programmierung/02_java/de","/01_programmierung/02_java","content/01_Programmierung/02_Java/de.md","I.2",[16],[49,139,190,202,214],{"key":50,"slug":51,"title":52,"cleanTitle":52,"numberedTitle":53,"description":54,"path":55,"basePath":56,"filePath":57,"pageType":58,"hidden":13,"effectiveHidden":13,"order":14,"depth":59,"number":60,"ownAudience":16,"audiences":61,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":63},"01_programmierung/02_java/01_oop_teil_i","01_oop_teil_i","OOP Teil I","I.2.1 OOP Teil I","Grundlagen der objektorientierten Programmierung mit Java.","/01_programmierung/02_java/01_oop_teil_i/de","/01_programmierung/02_java/01_oop_teil_i","content/01_Programmierung/02_Java/01_OOP_Teil_I/de.md","overview",3,"I.2.1",[16],"",[64,78,90,102,114,126],{"key":65,"slug":66,"title":67,"cleanTitle":67,"numberedTitle":68,"description":69,"path":70,"basePath":71,"filePath":72,"pageType":32,"hidden":13,"effectiveHidden":13,"order":73,"depth":74,"number":75,"ownAudience":16,"audiences":76,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":77},"01_programmierung/02_java/01_oop_teil_i/00_uebersicht_installation","00_uebersicht_installation","Uebersicht und Installation","I.2.1.1 Uebersicht und Installation","Programmierparadigmen, Java-Grundidee und Einrichtung der Entwicklungsumgebung.","/01_programmierung/02_java/01_oop_teil_i/00_uebersicht_installation/de","/01_programmierung/02_java/01_oop_teil_i/00_uebersicht_installation","content/01_Programmierung/02_Java/01_OOP_Teil_I/00_Uebersicht_Installation/de.md",0,4,"I.2.1.1",[16],[],{"key":79,"slug":80,"title":81,"cleanTitle":81,"numberedTitle":82,"description":83,"path":84,"basePath":85,"filePath":86,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":74,"number":87,"ownAudience":16,"audiences":88,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":89},"01_programmierung/02_java/01_oop_teil_i/01_klassen_und_objekte","01_klassen_und_objekte","Klassen und Objekte","I.2.1.2 Klassen und Objekte","Modellierung mit Klassen, Attribute, Methoden und erste Objektinstanzen.","/01_programmierung/02_java/01_oop_teil_i/01_klassen_und_objekte/de","/01_programmierung/02_java/01_oop_teil_i/01_klassen_und_objekte","content/01_Programmierung/02_Java/01_OOP_Teil_I/01_Klassen_und_Objekte/de.md","I.2.1.2",[16],[],{"key":91,"slug":92,"title":93,"cleanTitle":93,"numberedTitle":94,"description":95,"path":96,"basePath":97,"filePath":98,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":74,"number":99,"ownAudience":16,"audiences":100,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":101},"01_programmierung/02_java/01_oop_teil_i/02_datentypen_methoden_parameter","02_datentypen_methoden_parameter","Datentypen, Methoden und Parameter","I.2.1.3 Datentypen, Methoden und Parameter","Primitive Typen, lokale Variablen, Methodensignaturen und Rueckgabewerte.","/01_programmierung/02_java/01_oop_teil_i/02_datentypen_methoden_parameter/de","/01_programmierung/02_java/01_oop_teil_i/02_datentypen_methoden_parameter","content/01_Programmierung/02_Java/01_OOP_Teil_I/02_Datentypen_Methoden_Parameter/de.md","I.2.1.3",[16],[],{"key":103,"slug":104,"title":105,"cleanTitle":105,"numberedTitle":106,"description":107,"path":108,"basePath":109,"filePath":110,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":74,"number":111,"ownAudience":16,"audiences":112,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":113},"01_programmierung/02_java/01_oop_teil_i/03_attribute_kapselung_setter_getter","03_attribute_kapselung_setter_getter","Attribute, Kapselung, Setter und Getter","I.2.1.4 Attribute, Kapselung, Setter und Getter","Saubere Objektzustaende durch Zugriffskontrolle und kontrollierte Schnittstellen.","/01_programmierung/02_java/01_oop_teil_i/03_attribute_kapselung_setter_getter/de","/01_programmierung/02_java/01_oop_teil_i/03_attribute_kapselung_setter_getter","content/01_Programmierung/02_Java/01_OOP_Teil_I/03_Attribute_Kapselung_Setter_Getter/de.md","I.2.1.4",[16],[],{"key":115,"slug":116,"title":117,"cleanTitle":117,"numberedTitle":118,"description":119,"path":120,"basePath":121,"filePath":122,"pageType":32,"hidden":13,"effectiveHidden":13,"order":74,"depth":74,"number":123,"ownAudience":16,"audiences":124,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":125},"01_programmierung/02_java/01_oop_teil_i/04_new_konstruktoren_ueberladen","04_new_konstruktoren_ueberladen","new, Konstruktoren und Ueberladen","I.2.1.5 new, Konstruktoren und Ueberladen","Objekte gezielt erzeugen und flexible Schnittstellen durch Ueberladen entwerfen.","/01_programmierung/02_java/01_oop_teil_i/04_new_konstruktoren_ueberladen/de","/01_programmierung/02_java/01_oop_teil_i/04_new_konstruktoren_ueberladen","content/01_Programmierung/02_Java/01_OOP_Teil_I/04_New_Konstruktoren_Ueberladen/de.md","I.2.1.5",[16],[],{"key":127,"slug":128,"title":129,"cleanTitle":129,"numberedTitle":130,"description":131,"path":132,"basePath":133,"filePath":134,"pageType":32,"hidden":13,"effectiveHidden":13,"order":135,"depth":74,"number":136,"ownAudience":16,"audiences":137,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":138},"01_programmierung/02_java/01_oop_teil_i/05_vererbung_abstrakte_klassen","05_vererbung_abstrakte_klassen","Vererbung und abstrakte Klassen","I.2.1.6 Vererbung und abstrakte Klassen","Code wiederverwenden, Spezialisierungen bilden und gemeinsame Schnittstellen sichern.","/01_programmierung/02_java/01_oop_teil_i/05_vererbung_abstrakte_klassen/de","/01_programmierung/02_java/01_oop_teil_i/05_vererbung_abstrakte_klassen","content/01_Programmierung/02_Java/01_OOP_Teil_I/05_Vererbung_Abstrakte_Klassen/de.md",5,"I.2.1.6",[16],[],{"key":140,"slug":141,"title":142,"cleanTitle":142,"numberedTitle":143,"description":144,"path":145,"basePath":146,"filePath":147,"pageType":58,"hidden":13,"effectiveHidden":13,"order":33,"depth":59,"number":148,"ownAudience":16,"audiences":149,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":150},"01_programmierung/02_java/02_schleifen_arrays_statischemethoden","02_schleifen_arrays_statischemethoden","Schleifen, Arrays und statische Methoden","I.2.2 Schleifen, Arrays und statische Methoden","Kontrollstrukturen, Array-Datenstrukturen und der Einsatz von static.","/01_programmierung/02_java/02_schleifen_arrays_statischemethoden/de","/01_programmierung/02_java/02_schleifen_arrays_statischemethoden","content/01_Programmierung/02_Java/02_Schleifen_Arrays_StatischeMethoden/de.md","I.2.2",[16],[151,164,177],{"key":152,"slug":153,"title":154,"cleanTitle":154,"numberedTitle":155,"description":156,"path":157,"basePath":158,"filePath":159,"pageType":32,"hidden":13,"effectiveHidden":13,"order":160,"depth":74,"number":161,"ownAudience":16,"audiences":162,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":163},"01_programmierung/02_java/02_schleifen_arrays_statischemethoden/06_statische_variablen_und_methoden","06_statische_variablen_und_methoden","Statische Variablen und Methoden","I.2.2.1 Statische Variablen und Methoden","Unterschied zwischen Instanz- und Klassenebene in Java.","/01_programmierung/02_java/02_schleifen_arrays_statischemethoden/06_statische_variablen_und_methoden/de","/01_programmierung/02_java/02_schleifen_arrays_statischemethoden/06_statische_variablen_und_methoden","content/01_Programmierung/02_Java/02_Schleifen_Arrays_StatischeMethoden/06_Statische_Variablen_und_Methoden/de.md",6,"I.2.2.1",[16],[],{"key":165,"slug":166,"title":167,"cleanTitle":167,"numberedTitle":168,"description":169,"path":170,"basePath":171,"filePath":172,"pageType":32,"hidden":13,"effectiveHidden":13,"order":173,"depth":74,"number":174,"ownAudience":16,"audiences":175,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":176},"01_programmierung/02_java/02_schleifen_arrays_statischemethoden/07_arrays","07_arrays","Arrays","I.2.2.2 Arrays","Ein- und mehrdimensionale Arrays, Initialisierung und typische Fehlerquellen.","/01_programmierung/02_java/02_schleifen_arrays_statischemethoden/07_arrays/de","/01_programmierung/02_java/02_schleifen_arrays_statischemethoden/07_arrays","content/01_Programmierung/02_Java/02_Schleifen_Arrays_StatischeMethoden/07_Arrays/de.md",7,"I.2.2.2",[16],[],{"key":178,"slug":179,"title":180,"cleanTitle":180,"numberedTitle":181,"description":182,"path":183,"basePath":184,"filePath":185,"pageType":32,"hidden":13,"effectiveHidden":13,"order":186,"depth":74,"number":187,"ownAudience":16,"audiences":188,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":189},"01_programmierung/02_java/02_schleifen_arrays_statischemethoden/08_schleifen_und_uebungen","08_schleifen_und_uebungen","Schleifen und Uebungen","I.2.2.3 Schleifen und Uebungen","for- und while-Schleifen, Summenformeln, Suche und verschachtelte Iteration.","/01_programmierung/02_java/02_schleifen_arrays_statischemethoden/08_schleifen_und_uebungen/de","/01_programmierung/02_java/02_schleifen_arrays_statischemethoden/08_schleifen_und_uebungen","content/01_Programmierung/02_Java/02_Schleifen_Arrays_StatischeMethoden/08_Schleifen_und_Uebungen/de.md",8,"I.2.2.3",[16],[],{"key":191,"slug":192,"title":193,"cleanTitle":193,"numberedTitle":194,"description":195,"path":196,"basePath":197,"filePath":198,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":59,"number":199,"ownAudience":16,"audiences":200,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":201},"01_programmierung/02_java/03_strukturierenmitmethoden","03_strukturierenmitmethoden","Strukturieren mit Methoden","I.2.3 Strukturieren mit Methoden","Lange Methoden in klar abgegrenzte Teilmethoden zerlegen.","/01_programmierung/02_java/03_strukturierenmitmethoden/de","/01_programmierung/02_java/03_strukturierenmitmethoden","content/01_Programmierung/02_Java/03_StrukturierenMitMethoden/de.md","I.2.3",[16],[],{"key":203,"slug":204,"title":205,"cleanTitle":205,"numberedTitle":206,"description":207,"path":208,"basePath":209,"filePath":210,"pageType":32,"hidden":13,"effectiveHidden":13,"order":74,"depth":59,"number":211,"ownAudience":16,"audiences":212,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":213},"01_programmierung/02_java/04_gueltigkeitundsichtbarkeit","04_gueltigkeitundsichtbarkeit","Gueltigkeit und Sichtbarkeit","I.2.4 Gueltigkeit und Sichtbarkeit","Scope, Lebensdauer und Zugriffsregeln von Variablen und Attributen.","/01_programmierung/02_java/04_gueltigkeitundsichtbarkeit/de","/01_programmierung/02_java/04_gueltigkeitundsichtbarkeit","content/01_Programmierung/02_Java/04_GueltigkeitUndSichtbarkeit/de.md","I.2.4",[16],[],{"key":215,"slug":216,"title":217,"cleanTitle":217,"numberedTitle":218,"description":219,"path":220,"basePath":221,"filePath":222,"pageType":58,"hidden":13,"effectiveHidden":13,"order":74,"depth":59,"number":223,"ownAudience":16,"audiences":224,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":225},"01_programmierung/02_java/04_oop_teil_ii","04_oop_teil_ii","OOP Teil II","I.2.5 OOP Teil II","Vertiefung zu Polymorphie, Typisierung, Interfaces und Modellierungsfragen.","/01_programmierung/02_java/04_oop_teil_ii/de","/01_programmierung/02_java/04_oop_teil_ii","content/01_Programmierung/02_Java/04_OOP_Teil_II/de.md","I.2.5",[16],[226,238],{"key":227,"slug":228,"title":229,"cleanTitle":229,"numberedTitle":230,"description":231,"path":232,"basePath":233,"filePath":234,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":74,"number":235,"ownAudience":16,"audiences":236,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":237},"01_programmierung/02_java/04_oop_teil_ii/01_uebungen","01_uebungen","Uebungen und Vertiefung","I.2.5.1 Uebungen und Vertiefung","Kovarianz, Polymorphie, statische Typisierung und erlaubte Zuweisungen.","/01_programmierung/02_java/04_oop_teil_ii/01_uebungen/de","/01_programmierung/02_java/04_oop_teil_ii/01_uebungen","content/01_Programmierung/02_Java/04_OOP_Teil_II/01_Uebungen/de.md","I.2.5.1",[16],[],{"key":239,"slug":240,"title":241,"cleanTitle":241,"numberedTitle":242,"description":243,"path":244,"basePath":245,"filePath":246,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":74,"number":247,"ownAudience":16,"audiences":248,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":249},"01_programmierung/02_java/04_oop_teil_ii/02_projekt_zahlen","02_projekt_zahlen","Projekt Zahlen","I.2.5.2 Projekt Zahlen","Natuerliche, ganze und rationale Zahlen mit Interfaces und sauberem Klassendesign.","/01_programmierung/02_java/04_oop_teil_ii/02_projekt_zahlen/de","/01_programmierung/02_java/04_oop_teil_ii/02_projekt_zahlen","content/01_Programmierung/02_Java/04_OOP_Teil_II/02_Projekt_Zahlen/de.md","I.2.5.2",[16],[],{"key":251,"slug":252,"title":253,"cleanTitle":253,"numberedTitle":254,"description":255,"path":256,"basePath":257,"filePath":258,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":33,"number":259,"ownAudience":16,"audiences":260,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":261},"01_programmierung/03_cleancode","03_cleancode","Clean Code","I.3 Clean Code","Grundlagen für sauberen und lesbaren Code.","/01_programmierung/03_cleancode/de","/01_programmierung/03_cleancode","content/01_Programmierung/03_CleanCode/de.md","I.3",[16],[],{"key":263,"slug":263,"title":264,"cleanTitle":264,"numberedTitle":265,"description":266,"path":267,"basePath":268,"filePath":269,"pageType":12,"hidden":13,"effectiveHidden":13,"order":186,"depth":14,"number":270,"ownAudience":62,"audiences":271,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":272},"08_kuenstlicheintelligenz","Künstliche Intelligenz","II Künstliche Intelligenz","Maschinelles Lernen und intelligente Systeme.","/08_kuenstlicheintelligenz/de","/08_kuenstlicheintelligenz","content/08_KuenstlicheIntelligenz/de.md","II",[16],[273,359,407,827,949],{"key":274,"slug":275,"title":276,"cleanTitle":276,"numberedTitle":277,"description":278,"path":279,"basePath":280,"filePath":281,"pageType":58,"hidden":13,"effectiveHidden":13,"order":14,"depth":33,"number":282,"ownAudience":62,"audiences":283,"coverDeLight":284,"coverEnLight":285,"coverDeDark":286,"coverEnDark":287,"children":288},"08_kuenstlicheintelligenz/01_was_ist_ki","01_was_ist_ki","Einführung in das Maschinelle Lernen","II.1 Einführung in das Maschinelle Lernen","Ein Überblick über die fundamentalen Konzepte des Maschinellen Lernens.","/08_kuenstlicheintelligenz/01_was_ist_ki/de","/08_kuenstlicheintelligenz/01_was_ist_ki","content/08_KuenstlicheIntelligenz/01_was_ist_ki/de.md","II.1",[16],"cover-de-light.webp","cover-en-light.webp","cover-de-dark.webp","cover-en-dark.webp",[289,300,312,323,335,347],{"key":290,"slug":291,"title":264,"cleanTitle":264,"numberedTitle":292,"description":293,"path":294,"basePath":295,"filePath":296,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":59,"number":297,"ownAudience":16,"audiences":298,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":299},"08_kuenstlicheintelligenz/01_was_ist_ki/01-kuenstliche-intelligenz","01-kuenstliche-intelligenz","II.1.1 Künstliche Intelligenz","Unterseite zu Künstliche Intelligenz","/08_kuenstlicheintelligenz/01_was_ist_ki/01-kuenstliche-intelligenz/de","/08_kuenstlicheintelligenz/01_was_ist_ki/01-kuenstliche-intelligenz","content/08_KuenstlicheIntelligenz/01_was_ist_ki/01-kuenstliche-intelligenz/de.md","II.1.1",[16],[],{"key":301,"slug":302,"title":303,"cleanTitle":303,"numberedTitle":304,"description":305,"path":306,"basePath":307,"filePath":308,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":59,"number":309,"ownAudience":16,"audiences":310,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":311},"08_kuenstlicheintelligenz/01_was_ist_ki/02-was-ist-ml","02-was-ist-ml","Was ist ML","II.1.2 Was ist ML","Eine Einführung in die Grundlagen des Maschinellen Lernens.","/08_kuenstlicheintelligenz/01_was_ist_ki/02-was-ist-ml/de","/08_kuenstlicheintelligenz/01_was_ist_ki/02-was-ist-ml","content/08_KuenstlicheIntelligenz/01_was_ist_ki/02-was-ist-ml/de.md","II.1.2",[16],[],{"key":313,"slug":314,"title":315,"cleanTitle":315,"numberedTitle":316,"description":62,"path":317,"basePath":318,"filePath":319,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":59,"number":320,"ownAudience":16,"audiences":321,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":322},"08_kuenstlicheintelligenz/01_was_ist_ki/03-datascience_und_datenarten","03-datascience_und_datenarten","Qualitative und quantitative Merkmale","II.1.3 Qualitative und quantitative Merkmale","/08_kuenstlicheintelligenz/01_was_ist_ki/03-datascience_und_datenarten/de","/08_kuenstlicheintelligenz/01_was_ist_ki/03-datascience_und_datenarten","content/08_KuenstlicheIntelligenz/01_was_ist_ki/03-DataScience_und_Datenarten/de.md","II.1.3",[16],[],{"key":324,"slug":325,"title":326,"cleanTitle":326,"numberedTitle":327,"description":328,"path":329,"basePath":330,"filePath":331,"pageType":32,"hidden":13,"effectiveHidden":13,"order":74,"depth":59,"number":332,"ownAudience":16,"audiences":333,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":334},"08_kuenstlicheintelligenz/01_was_ist_ki/04_featureextraction","04_featureextraction","Feature Extraction","II.1.4 Feature Extraction","Von Rohdaten wie Audioaufnahmen zu Merkmalen und Datensätzen.","/08_kuenstlicheintelligenz/01_was_ist_ki/04_featureextraction/de","/08_kuenstlicheintelligenz/01_was_ist_ki/04_featureextraction","content/08_KuenstlicheIntelligenz/01_was_ist_ki/04_featureextraction/de.md","II.1.4",[16],[],{"key":336,"slug":337,"title":338,"cleanTitle":338,"numberedTitle":339,"description":340,"path":341,"basePath":342,"filePath":343,"pageType":32,"hidden":13,"effectiveHidden":13,"order":135,"depth":59,"number":344,"ownAudience":16,"audiences":345,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":346},"08_kuenstlicheintelligenz/01_was_ist_ki/05-lernparadigmen_von_ml","05-lernparadigmen_von_ml","Arten von ML","II.1.5 Arten von ML","Ueberblick ueber Ueberwachtes, Unueberwachtes und Verstaerkendes Lernen.","/08_kuenstlicheintelligenz/01_was_ist_ki/05-lernparadigmen_von_ml/de","/08_kuenstlicheintelligenz/01_was_ist_ki/05-lernparadigmen_von_ml","content/08_KuenstlicheIntelligenz/01_was_ist_ki/05-lernparadigmen_von_ml/de.md","II.1.5",[16],[],{"key":348,"slug":349,"title":350,"cleanTitle":350,"numberedTitle":351,"description":352,"path":353,"basePath":354,"filePath":355,"pageType":32,"hidden":13,"effectiveHidden":13,"order":160,"depth":59,"number":356,"ownAudience":16,"audiences":357,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":358},"08_kuenstlicheintelligenz/01_was_ist_ki/06-ueberblick","06-ueberblick","Ueberblick","II.1.6 Ueberblick","Zusammenfassung der wichtigsten Begriffe aus dem Unterkapitel Was ist KI.","/08_kuenstlicheintelligenz/01_was_ist_ki/06-ueberblick/de","/08_kuenstlicheintelligenz/01_was_ist_ki/06-ueberblick","content/08_KuenstlicheIntelligenz/01_was_ist_ki/06-ueberblick/de.md","II.1.6",[16],[],{"key":360,"slug":361,"title":362,"cleanTitle":362,"numberedTitle":363,"description":364,"path":365,"basePath":366,"filePath":367,"pageType":12,"hidden":13,"effectiveHidden":13,"order":33,"depth":33,"number":368,"ownAudience":62,"audiences":369,"coverDeLight":284,"coverEnLight":285,"coverDeDark":286,"coverEnDark":287,"children":370},"08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele","grundlagen-und-datenbeispiele","Grundlagen und Datensatzbeispiele","II.2 Grundlagen und Datensatzbeispiele","Unterseite zu Grundlagen und Datensatzbeispiele","/08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/de","/08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele","content/08_KuenstlicheIntelligenz/grundlagen-und-datenbeispiele/de.md","II.2",[],[371,383,395],{"key":372,"slug":373,"title":374,"cleanTitle":374,"numberedTitle":375,"description":376,"path":377,"basePath":378,"filePath":379,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":59,"number":380,"ownAudience":62,"audiences":381,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":382},"08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/datensatzbeispiele","datensatzbeispiele","Datenarten und Datensatzbeispiele","II.2.1 Datenarten und Datensatzbeispiele","Unterseite zu Datensatzbeispiele","/08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/datensatzbeispiele/de","/08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/datensatzbeispiele","content/08_KuenstlicheIntelligenz/grundlagen-und-datenbeispiele/datensatzbeispiele/de.md","II.2.1",[],[],{"key":384,"slug":385,"title":386,"cleanTitle":386,"numberedTitle":387,"description":388,"path":389,"basePath":390,"filePath":391,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":59,"number":392,"ownAudience":62,"audiences":393,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":394},"08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/dinstanzm","dinstanzm","Distanzmaße","II.2.2 Distanzmaße","Unterseite zu Distanzmaße","/08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/dinstanzm/de","/08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/dinstanzm","content/08_KuenstlicheIntelligenz/grundlagen-und-datenbeispiele/dinstanzm/de.md","II.2.2",[],[],{"key":396,"slug":397,"title":398,"cleanTitle":398,"numberedTitle":399,"description":400,"path":401,"basePath":402,"filePath":403,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":59,"number":404,"ownAudience":62,"audiences":405,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":406},"08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/suche","suche","Suche, Precision und Recall","II.2.3 Suche, Precision und Recall","Unterseite zu Suche, Precision und Recall","/08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/suche/de","/08_kuenstlicheintelligenz/grundlagen-und-datenbeispiele/suche","content/08_KuenstlicheIntelligenz/grundlagen-und-datenbeispiele/suche/de.md","II.2.3",[],[],{"key":408,"slug":409,"title":410,"cleanTitle":410,"numberedTitle":411,"description":412,"path":413,"basePath":414,"filePath":415,"pageType":12,"hidden":13,"effectiveHidden":13,"order":59,"depth":33,"number":416,"ownAudience":62,"audiences":417,"coverDeLight":284,"coverEnLight":285,"coverDeDark":286,"coverEnDark":287,"children":418},"08_kuenstlicheintelligenz/02_supervisedlearning","02_supervisedlearning","Überwachtes Lernen","II.3 Überwachtes Lernen","Unterseite zu 02_supervisedlearning","/08_kuenstlicheintelligenz/02_supervisedlearning/de","/08_kuenstlicheintelligenz/02_supervisedlearning","content/08_KuenstlicheIntelligenz/02_supervisedlearning/de.md","II.3",[16],[419,515,527,563,575,815],{"key":420,"slug":421,"title":422,"cleanTitle":422,"numberedTitle":423,"description":424,"path":425,"basePath":426,"filePath":427,"pageType":58,"hidden":13,"effectiveHidden":13,"order":14,"depth":59,"number":428,"ownAudience":62,"audiences":429,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":430},"08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl","01_grundlagen_des_sl","Grundlagen des Supervised Learnings","II.3.1 Grundlagen des Supervised Learnings","Unterseite zu Grundlagen des Supervised Learnings","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/de","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl","content/08_KuenstlicheIntelligenz/02_supervisedlearning/01_grundlagen_des_sl/de.md","II.3.1",[16],[431,443,455,467,479,491,503],{"key":432,"slug":433,"title":434,"cleanTitle":434,"numberedTitle":435,"description":436,"path":437,"basePath":438,"filePath":439,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":74,"number":440,"ownAudience":62,"audiences":441,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":442},"08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/02_klassifikation_mit_entscheidungsbaumen","02_klassifikation_mit_entscheidungsbaumen","Klassifikation mit Entscheidungsbäumen","II.3.1.1 Klassifikation mit Entscheidungsbäumen","Unterseite zu Klassifikation mit Entscheidungsbäumen","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/02_klassifikation_mit_entscheidungsbaumen/de","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/02_klassifikation_mit_entscheidungsbaumen","content/08_KuenstlicheIntelligenz/02_supervisedlearning/01_grundlagen_des_sl/02_klassifikation_mit_entscheidungsbaumen/de.md","II.3.1.1",[],[],{"key":444,"slug":445,"title":446,"cleanTitle":446,"numberedTitle":447,"description":448,"path":449,"basePath":450,"filePath":451,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":74,"number":452,"ownAudience":62,"audiences":453,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":454},"08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/03_regression_mit_entscheidungsbaemen","03_regression_mit_entscheidungsbaemen","Regression mit Entscheidungsbäumen","II.3.1.2 Regression mit Entscheidungsbäumen","Unterseite zu Regression mit Entscheidungsbäumen","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/03_regression_mit_entscheidungsbaemen/de","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/03_regression_mit_entscheidungsbaemen","content/08_KuenstlicheIntelligenz/02_supervisedlearning/01_grundlagen_des_sl/03_regression_mit_entscheidungsbaemen/de.md","II.3.1.2",[],[],{"key":456,"slug":457,"title":458,"cleanTitle":458,"numberedTitle":459,"description":460,"path":461,"basePath":462,"filePath":463,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":74,"number":464,"ownAudience":62,"audiences":465,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":466},"08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/01_problemstellungen_des_sl","01_problemstellungen_des_sl","Aufgabenstellungen des Überwachten Lernens","II.3.1.3 Aufgabenstellungen des Überwachten Lernens","Unterseite zu Aufgabenstellungen des Überwachten Lernens","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/01_problemstellungen_des_sl/de","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/01_problemstellungen_des_sl","content/08_KuenstlicheIntelligenz/02_supervisedlearning/01_grundlagen_des_sl/01_problemstellungen_des_sl/de.md","II.3.1.3",[],[],{"key":468,"slug":469,"title":470,"cleanTitle":470,"numberedTitle":471,"description":472,"path":473,"basePath":474,"filePath":475,"pageType":32,"hidden":13,"effectiveHidden":13,"order":74,"depth":74,"number":476,"ownAudience":62,"audiences":477,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":478},"08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/04_beurteilung_von_klassifikatoren","04_beurteilung_von_klassifikatoren","Beurteilung von Klassifikatoren","II.3.1.4 Beurteilung von Klassifikatoren","Unterseite zu 04_beurteilung_von_klassifikatoren","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/04_beurteilung_von_klassifikatoren/de","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/04_beurteilung_von_klassifikatoren","content/08_KuenstlicheIntelligenz/02_supervisedlearning/01_grundlagen_des_sl/04_beurteilung_von_klassifikatoren/de.md","II.3.1.4",[],[],{"key":480,"slug":481,"title":482,"cleanTitle":482,"numberedTitle":483,"description":484,"path":485,"basePath":486,"filePath":487,"pageType":32,"hidden":13,"effectiveHidden":13,"order":135,"depth":74,"number":488,"ownAudience":62,"audiences":489,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":490},"08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/05_beurteilung_von_regressionsmodellen","05_beurteilung_von_regressionsmodellen","Beurteilung von Modellen der Regression","II.3.1.5 Beurteilung von Modellen der Regression","Unterseite zu Beurteilung von Modellen der Regression","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/05_beurteilung_von_regressionsmodellen/de","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/05_beurteilung_von_regressionsmodellen","content/08_KuenstlicheIntelligenz/02_supervisedlearning/01_grundlagen_des_sl/05_beurteilung_von_regressionsmodellen/de.md","II.3.1.5",[],[],{"key":492,"slug":493,"title":494,"cleanTitle":494,"numberedTitle":495,"description":496,"path":497,"basePath":498,"filePath":499,"pageType":32,"hidden":13,"effectiveHidden":13,"order":160,"depth":74,"number":500,"ownAudience":16,"audiences":501,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":502},"08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/01-lineare-regression","01-lineare-regression","Lineare Regression","II.3.1.6 Lineare Regression","Grundlagen der linearen Regression im überwachten Lernen.","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/01-lineare-regression/de","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/01-lineare-regression","content/08_KuenstlicheIntelligenz/02_supervisedlearning/01_grundlagen_des_sl/01-lineare-regression/de.md","II.3.1.6",[16],[],{"key":504,"slug":505,"title":506,"cleanTitle":506,"numberedTitle":507,"description":508,"path":509,"basePath":510,"filePath":511,"pageType":32,"hidden":13,"effectiveHidden":13,"order":173,"depth":74,"number":512,"ownAudience":62,"audiences":513,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":514},"08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/06_diskriminative_vs_generative_modellederklassifikation","06_diskriminative_vs_generative_modellederklassifikation","Diskriminative und Generative Modelle der Klassifikation","II.3.1.7 Diskriminative und Generative Modelle der Klassifikation","Unterseite zu Diskriminative und Generative Modelle der Klassifikation","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/06_diskriminative_vs_generative_modellederklassifikation/de","/08_kuenstlicheintelligenz/02_supervisedlearning/01_grundlagen_des_sl/06_diskriminative_vs_generative_modellederklassifikation","content/08_KuenstlicheIntelligenz/02_supervisedlearning/01_grundlagen_des_sl/06_diskriminative_vs_generative_modellederklassifikation/de.md","II.3.1.7",[],[],{"key":516,"slug":517,"title":518,"cleanTitle":518,"numberedTitle":519,"description":520,"path":521,"basePath":522,"filePath":523,"pageType":12,"hidden":13,"effectiveHidden":13,"order":33,"depth":59,"number":524,"ownAudience":62,"audiences":525,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":526},"08_kuenstlicheintelligenz/02_supervisedlearning/03_knn","03_knn","KNN","II.3.2 KNN","Unterseite zu KNN","/08_kuenstlicheintelligenz/02_supervisedlearning/03_knn/de","/08_kuenstlicheintelligenz/02_supervisedlearning/03_knn","content/08_KuenstlicheIntelligenz/02_supervisedlearning/03_knn/de.md","II.3.2",[],[],{"key":528,"slug":529,"title":530,"cleanTitle":530,"numberedTitle":531,"description":532,"path":533,"basePath":534,"filePath":535,"pageType":12,"hidden":13,"effectiveHidden":13,"order":59,"depth":59,"number":536,"ownAudience":62,"audiences":537,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":538},"08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn","02_fnn","FNNs","II.3.3 FNNs","Unterseite zu FNNs","/08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn/de","/08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn","content/08_KuenstlicheIntelligenz/02_supervisedlearning/02_fnn/de.md","II.3.3",[16],[539,551],{"key":540,"slug":541,"title":542,"cleanTitle":542,"numberedTitle":543,"description":544,"path":545,"basePath":546,"filePath":547,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":74,"number":548,"ownAudience":16,"audiences":549,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":550},"08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn/aktivierungsfunktionen","aktivierungsfunktionen","Aktivierungsfunktionen","II.3.3.1 Aktivierungsfunktionen","Unterseite zu Aktivierungsfunktionen","/08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn/aktivierungsfunktionen/de","/08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn/aktivierungsfunktionen","content/08_KuenstlicheIntelligenz/02_supervisedlearning/02_fnn/aktivierungsfunktionen/de.md","II.3.3.1",[16],[],{"key":552,"slug":553,"title":554,"cleanTitle":554,"numberedTitle":555,"description":556,"path":557,"basePath":558,"filePath":559,"pageType":32,"hidden":13,"effectiveHidden":13,"order":-4,"depth":74,"number":560,"ownAudience":62,"audiences":561,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":562},"08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn/kunstliche-neuronen","kunstliche-neuronen","Künstliche Neuronen","II.3.3.2 Künstliche Neuronen","Unterseite zu Künstliche Neuronen","/08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn/kunstliche-neuronen/de","/08_kuenstlicheintelligenz/02_supervisedlearning/02_fnn/kunstliche-neuronen","content/08_KuenstlicheIntelligenz/02_supervisedlearning/02_fnn/kunstliche-neuronen/de.md","II.3.3.2",[],[],{"key":564,"slug":565,"title":566,"cleanTitle":566,"numberedTitle":567,"description":568,"path":569,"basePath":570,"filePath":571,"pageType":58,"hidden":13,"effectiveHidden":13,"order":74,"depth":59,"number":572,"ownAudience":62,"audiences":573,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":574},"08_kuenstlicheintelligenz/02_supervisedlearning/04_svms","04_svms","SVMs","II.3.4 SVMs","Unterseite zu SVMs","/08_kuenstlicheintelligenz/02_supervisedlearning/04_svms/de","/08_kuenstlicheintelligenz/02_supervisedlearning/04_svms","content/08_KuenstlicheIntelligenz/02_supervisedlearning/04_svms/de.md","II.3.4",[],[],{"key":576,"slug":577,"title":578,"cleanTitle":578,"numberedTitle":579,"description":580,"path":581,"basePath":582,"filePath":583,"pageType":12,"hidden":13,"effectiveHidden":13,"order":160,"depth":59,"number":584,"ownAudience":62,"audiences":585,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":586},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung","05_verfahren_zur_modellanpassung","Verfahren zur Modellanpassung","II.3.5 Verfahren zur Modellanpassung","Wie Modelle ihre Parameter an Trainingsdaten anpassen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/de.md","II.3.5",[],[587,671,743],{"key":588,"slug":589,"title":590,"cleanTitle":590,"numberedTitle":591,"description":592,"path":593,"basePath":594,"filePath":595,"pageType":58,"hidden":13,"effectiveHidden":13,"order":14,"depth":74,"number":596,"ownAudience":62,"audiences":597,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":598},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung","01_gradientenbasierte_optimierung","Gradientenbasierte Optimierung beim Training von FNNs","II.3.5.1 Gradientenbasierte Optimierung beim Training von FNNs","Parameter schrittweise mit Hilfe von Gradienten verbessern","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/de.md","II.3.5.1",[],[599,611,623,635,647,659],{"key":600,"slug":601,"title":602,"cleanTitle":602,"numberedTitle":603,"description":604,"path":605,"basePath":606,"filePath":607,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":135,"number":608,"ownAudience":62,"audiences":609,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":610},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/funktionenbeimfnn-training","funktionenbeimfnn-training","Optimierungsproblem: Training von FNNs","II.3.5.1.1 Optimierungsproblem: Training von FNNs","Wie lassen sich die Parameter eines FNNs zur Vorhersage eines Trainingsdatensatzes anpassen?","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/funktionenbeimfnn-training/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/funktionenbeimfnn-training","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/funktionenbeimfnn-training/de.md","II.3.5.1.1",[],[],{"key":612,"slug":613,"title":614,"cleanTitle":614,"numberedTitle":615,"description":616,"path":617,"basePath":618,"filePath":619,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":135,"number":620,"ownAudience":62,"audiences":621,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":622},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/01_gradientenabstieg","01_gradientenabstieg","Gradientenabstiegsverfahren","II.3.5.1.2 Gradientenabstiegsverfahren","Ein grundlegendes Verfahren zum Minimieren einer Verlustfunktion","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/01_gradientenabstieg/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/01_gradientenabstieg","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/01_gradientenabstieg/de.md","II.3.5.1.2",[],[],{"key":624,"slug":625,"title":626,"cleanTitle":626,"numberedTitle":627,"description":628,"path":629,"basePath":630,"filePath":631,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":135,"number":632,"ownAudience":62,"audiences":633,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":634},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/02_stochastischer_gradientenabstieg","02_stochastischer_gradientenabstieg","Verfahrensüberblick und Alternativen","II.3.5.1.3 Verfahrensüberblick und Alternativen","Gegenüberstellung, Verfahren höherer Ordnung","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/02_stochastischer_gradientenabstieg/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/02_stochastischer_gradientenabstieg","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/02_stochastischer_gradientenabstieg/de.md","II.3.5.1.3",[],[],{"key":636,"slug":637,"title":638,"cleanTitle":638,"numberedTitle":639,"description":640,"path":641,"basePath":642,"filePath":643,"pageType":32,"hidden":13,"effectiveHidden":13,"order":74,"depth":135,"number":644,"ownAudience":62,"audiences":645,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":646},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/03_mini_batch_verfahren","03_mini_batch_verfahren","Mini-Batch-Verfahren und Optimizer","II.3.5.1.4 Mini-Batch-Verfahren und Optimizer","Gradienten aus kleinen Gruppen von Trainingsbeispielen berechnen, Verschiedene Verwendungsansätze des Gradienten","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/03_mini_batch_verfahren/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/03_mini_batch_verfahren","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/03_mini_batch_verfahren/de.md","II.3.5.1.4",[],[],{"key":648,"slug":649,"title":650,"cleanTitle":650,"numberedTitle":651,"description":652,"path":653,"basePath":654,"filePath":655,"pageType":32,"hidden":13,"effectiveHidden":13,"order":135,"depth":135,"number":656,"ownAudience":62,"audiences":657,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":658},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/04_backpropagation","04_backpropagation","Backpropagation","II.3.5.1.5 Backpropagation","Gradienten in neuronalen Netzen effizient berechnen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/04_backpropagation/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/04_backpropagation","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/04_backpropagation/de.md","II.3.5.1.5",[],[],{"key":660,"slug":661,"title":662,"cleanTitle":662,"numberedTitle":663,"description":664,"path":665,"basePath":666,"filePath":667,"pageType":32,"hidden":13,"effectiveHidden":13,"order":-4,"depth":135,"number":668,"ownAudience":62,"audiences":669,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":670},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/mathematischeranhang_diffrechnung","mathematischeranhang_diffrechnung","Mathematischer Anhang: Differentialrechnung","II.3.5.1.6 Mathematischer Anhang: Differentialrechnung","Unterseite zu Mathematischer Anhang: Differentialrechnung","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/mathematischeranhang_diffrechnung/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/mathematischeranhang_diffrechnung","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/01_gradientenbasierte_optimierung/mathematischeranhang_diffrechnung/de.md","II.3.5.1.6",[],[],{"key":672,"slug":673,"title":674,"cleanTitle":674,"numberedTitle":675,"description":676,"path":677,"basePath":678,"filePath":679,"pageType":58,"hidden":13,"effectiveHidden":13,"order":33,"depth":74,"number":680,"ownAudience":62,"audiences":681,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":682},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung","02_lineare_ausgleichsrechnung","Lineare Ausgleichsrechnung","II.3.5.2 Lineare Ausgleichsrechnung","Lineare Modelle so anpassen, dass Fehlerquadrate klein werden","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/de.md","II.3.5.2",[],[683,695,707,719,731],{"key":684,"slug":685,"title":686,"cleanTitle":686,"numberedTitle":687,"description":688,"path":689,"basePath":690,"filePath":691,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":135,"number":692,"ownAudience":62,"audiences":693,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":694},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/01_methode_der_kleinsten_quadrate","01_methode_der_kleinsten_quadrate","Methode der kleinsten Quadrate","II.3.5.2.1 Methode der kleinsten Quadrate","Eine Gerade oder Funktion möglichst passend an Daten legen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/01_methode_der_kleinsten_quadrate/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/01_methode_der_kleinsten_quadrate","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/01_methode_der_kleinsten_quadrate/de.md","II.3.5.2.1",[],[],{"key":696,"slug":697,"title":698,"cleanTitle":698,"numberedTitle":699,"description":700,"path":701,"basePath":702,"filePath":703,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":135,"number":704,"ownAudience":62,"audiences":705,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":706},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/02_normalengleichungen","02_normalengleichungen","Normalengleichungen","II.3.5.2.2 Normalengleichungen","Least-Squares-Probleme als lineares Gleichungssystem lösen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/02_normalengleichungen/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/02_normalengleichungen","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/02_normalengleichungen/de.md","II.3.5.2.2",[],[],{"key":708,"slug":709,"title":710,"cleanTitle":710,"numberedTitle":711,"description":712,"path":713,"basePath":714,"filePath":715,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":135,"number":716,"ownAudience":62,"audiences":717,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":718},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/03_qr_zerlegung","03_qr_zerlegung","QR-Zerlegung","II.3.5.2.3 QR-Zerlegung","Least-Squares-Probleme stabil mit orthogonalen Matrizen lösen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/03_qr_zerlegung/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/03_qr_zerlegung","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/03_qr_zerlegung/de.md","II.3.5.2.3",[],[],{"key":720,"slug":721,"title":722,"cleanTitle":722,"numberedTitle":723,"description":724,"path":725,"basePath":726,"filePath":727,"pageType":32,"hidden":13,"effectiveHidden":13,"order":74,"depth":135,"number":728,"ownAudience":62,"audiences":729,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":730},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/04_householder_transformationen","04_householder_transformationen","Householder-Transformationen","II.3.5.2.4 Householder-Transformationen","Spiegelungen als Bausteine stabiler Matrixzerlegungen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/04_householder_transformationen/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/04_householder_transformationen","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/04_householder_transformationen/de.md","II.3.5.2.4",[],[],{"key":732,"slug":733,"title":734,"cleanTitle":734,"numberedTitle":735,"description":736,"path":737,"basePath":738,"filePath":739,"pageType":32,"hidden":13,"effectiveHidden":13,"order":135,"depth":135,"number":740,"ownAudience":62,"audiences":741,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":742},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/05_regularisierung_ridge_lasso","05_regularisierung_ridge_lasso","Regularisierung: Ridge und Lasso","II.3.5.2.5 Regularisierung: Ridge und Lasso","Wie Ridge- und Lasso-Regression Least Squares erweitern","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/05_regularisierung_ridge_lasso/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/05_regularisierung_ridge_lasso","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/02_lineare_ausgleichsrechnung/05_regularisierung_ridge_lasso/de.md","II.3.5.2.5",[],[],{"key":744,"slug":745,"title":746,"cleanTitle":746,"numberedTitle":747,"description":748,"path":749,"basePath":750,"filePath":751,"pageType":58,"hidden":13,"effectiveHidden":13,"order":59,"depth":74,"number":752,"ownAudience":62,"audiences":753,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":754},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung","03_statistische_parameterschaetzung","Statistische Parameterschätzung","II.3.5.3 Statistische Parameterschätzung","Parameter als Erklärung für beobachtete Daten bestimmen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/de.md","II.3.5.3",[],[755,767,779,791,803],{"key":756,"slug":757,"title":758,"cleanTitle":758,"numberedTitle":759,"description":760,"path":761,"basePath":762,"filePath":763,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":135,"number":764,"ownAudience":62,"audiences":765,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":766},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/01_maximum_likelihood_schaetzung","01_maximum_likelihood_schaetzung","Maximum-Likelihood-Schätzung","II.3.5.3.1 Maximum-Likelihood-Schätzung","Parameter wählen, unter denen die beobachteten Daten möglichst wahrscheinlich sind","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/01_maximum_likelihood_schaetzung/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/01_maximum_likelihood_schaetzung","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/01_maximum_likelihood_schaetzung/de.md","II.3.5.3.1",[],[],{"key":768,"slug":769,"title":770,"cleanTitle":770,"numberedTitle":771,"description":772,"path":773,"basePath":774,"filePath":775,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":135,"number":776,"ownAudience":62,"audiences":777,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":778},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/02_latente_variablen","02_latente_variablen","Latente Variablen","II.3.5.3.2 Latente Variablen","Verborgene Größen in statistischen Modellen berücksichtigen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/02_latente_variablen/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/02_latente_variablen","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/02_latente_variablen/de.md","II.3.5.3.2",[],[],{"key":780,"slug":781,"title":782,"cleanTitle":782,"numberedTitle":783,"description":784,"path":785,"basePath":786,"filePath":787,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":135,"number":788,"ownAudience":62,"audiences":789,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":790},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/03_e_schritt","03_e_schritt","E-Schritt","II.3.5.3.3 E-Schritt","Erwartungen über verborgene Variablen berechnen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/03_e_schritt/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/03_e_schritt","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/03_e_schritt/de.md","II.3.5.3.3",[],[],{"key":792,"slug":793,"title":794,"cleanTitle":794,"numberedTitle":795,"description":796,"path":797,"basePath":798,"filePath":799,"pageType":32,"hidden":13,"effectiveHidden":13,"order":74,"depth":135,"number":800,"ownAudience":62,"audiences":801,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":802},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/04_m_schritt","04_m_schritt","M-Schritt","II.3.5.3.4 M-Schritt","Parameter anhand der erwarteten verborgenen Informationen verbessern","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/04_m_schritt/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/04_m_schritt","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/04_m_schritt/de.md","II.3.5.3.4",[],[],{"key":804,"slug":805,"title":806,"cleanTitle":806,"numberedTitle":807,"description":808,"path":809,"basePath":810,"filePath":811,"pageType":32,"hidden":13,"effectiveHidden":13,"order":135,"depth":135,"number":812,"ownAudience":62,"audiences":813,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":814},"08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/05_em_algorithmus","05_em_algorithmus","EM-Algorithmus","II.3.5.3.5 EM-Algorithmus","Abwechselnd verborgene Informationen und Parameter schätzen","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/05_em_algorithmus/de","/08_kuenstlicheintelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/05_em_algorithmus","content/08_KuenstlicheIntelligenz/02_supervisedlearning/05_verfahren_zur_modellanpassung/03_statistische_parameterschaetzung/05_em_algorithmus/de.md","II.3.5.3.5",[],[],{"key":816,"slug":817,"title":818,"cleanTitle":818,"numberedTitle":819,"description":820,"path":821,"basePath":822,"filePath":823,"pageType":32,"hidden":13,"effectiveHidden":13,"order":173,"depth":59,"number":824,"ownAudience":62,"audiences":825,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":826},"08_kuenstlicheintelligenz/02_supervisedlearning/modelzoo","modelzoo","Modell Zoo","II.3.6 Modell Zoo","Unterseite zu Modell Zoo","/08_kuenstlicheintelligenz/02_supervisedlearning/modelzoo/de","/08_kuenstlicheintelligenz/02_supervisedlearning/modelzoo","content/08_KuenstlicheIntelligenz/02_supervisedlearning/modelzoo/de.md","II.3.6",[],[],{"key":828,"slug":829,"title":830,"cleanTitle":830,"numberedTitle":831,"description":832,"path":833,"basePath":834,"filePath":835,"pageType":12,"hidden":13,"effectiveHidden":13,"order":74,"depth":33,"number":836,"ownAudience":62,"audiences":837,"coverDeLight":284,"coverEnLight":285,"coverDeDark":286,"coverEnDark":287,"children":838},"08_kuenstlicheintelligenz/05_unsupervisedlearning","05_unsupervisedlearning","Unüberwachtes Lernen","II.4 Unüberwachtes Lernen","Unterseite zu Unüberwachtem Lernen","/08_kuenstlicheintelligenz/05_unsupervisedlearning/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/de.md","II.4",[16],[839,851,863,875,937],{"key":840,"slug":841,"title":842,"cleanTitle":842,"numberedTitle":843,"description":844,"path":845,"basePath":846,"filePath":847,"pageType":58,"hidden":13,"effectiveHidden":13,"order":-4,"depth":59,"number":848,"ownAudience":62,"audiences":849,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":850},"08_kuenstlicheintelligenz/05_unsupervisedlearning/anomalydetection","anomalydetection","Anomalieerkennung","II.4.1 Anomalieerkennung","Unterseite zu Anomalieerkennung","/08_kuenstlicheintelligenz/05_unsupervisedlearning/anomalydetection/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/anomalydetection","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/anomalydetection/de.md","II.4.1",[],[],{"key":852,"slug":853,"title":854,"cleanTitle":854,"numberedTitle":855,"description":856,"path":857,"basePath":858,"filePath":859,"pageType":58,"hidden":13,"effectiveHidden":13,"order":-4,"depth":59,"number":860,"ownAudience":62,"audiences":861,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":862},"08_kuenstlicheintelligenz/05_unsupervisedlearning/associationrulelearning","associationrulelearning","Assoziationsregel-Lernen","II.4.2 Assoziationsregel-Lernen","Unterseite zu Assoziationsregel-Lernen","/08_kuenstlicheintelligenz/05_unsupervisedlearning/associationrulelearning/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/associationrulelearning","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/associationrulelearning/de.md","II.4.2",[],[],{"key":864,"slug":865,"title":866,"cleanTitle":866,"numberedTitle":867,"description":868,"path":869,"basePath":870,"filePath":871,"pageType":32,"hidden":13,"effectiveHidden":13,"order":-4,"depth":59,"number":872,"ownAudience":62,"audiences":873,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":874},"08_kuenstlicheintelligenz/05_unsupervisedlearning/aufgabendesul","aufgabendesul","Aufgaben im Unsupervised Learning","II.4.3 Aufgaben im Unsupervised Learning","Unterseite zu Aufgaben im Unsupervised Learning","/08_kuenstlicheintelligenz/05_unsupervisedlearning/aufgabendesul/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/aufgabendesul","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/aufgabendesul/de.md","II.4.3",[],[],{"key":876,"slug":877,"title":878,"cleanTitle":878,"numberedTitle":879,"description":880,"path":881,"basePath":882,"filePath":883,"pageType":58,"hidden":13,"effectiveHidden":13,"order":-4,"depth":59,"number":884,"ownAudience":62,"audiences":885,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":886},"08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering","clustering","Clustering","II.4.4 Clustering","Unterseite zu Clustering","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/clustering/de.md","II.4.4",[16],[887,899,911,924],{"key":888,"slug":889,"title":890,"cleanTitle":890,"numberedTitle":891,"description":892,"path":893,"basePath":894,"filePath":895,"pageType":32,"hidden":13,"effectiveHidden":13,"order":14,"depth":74,"number":896,"ownAudience":62,"audiences":897,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":898},"08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/dbscan","dbscan","DBSCAN","II.4.4.1 DBSCAN","Unterseite zu DBSCAN","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/dbscan/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/dbscan","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/clustering/dbscan/de.md","II.4.4.1",[],[],{"key":900,"slug":901,"title":902,"cleanTitle":902,"numberedTitle":903,"description":904,"path":905,"basePath":906,"filePath":907,"pageType":32,"hidden":13,"effectiveHidden":13,"order":33,"depth":74,"number":908,"ownAudience":62,"audiences":909,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":910},"08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/kmeans","kmeans","Das k-Means Verfahren","II.4.4.2 Das k-Means Verfahren","Unterseite zu Das k-Means Verfahren","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/kmeans/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/kmeans","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/clustering/kmeans/de.md","II.4.4.2",[],[],{"key":912,"slug":913,"title":914,"cleanTitle":915,"numberedTitle":916,"description":917,"path":918,"basePath":919,"filePath":920,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":74,"number":921,"ownAudience":16,"audiences":922,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":923},"08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/01-einfuehrung-kmeans","01-einfuehrung-kmeans","01-Einführung in K-Means Clustering","Einführung in K-Means Clustering","II.4.4.3 Einführung in K-Means Clustering","Grundlagen und interaktive Visualisierung des K-Means Algorithmus.","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/01-einfuehrung-kmeans/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/01-einfuehrung-kmeans","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/clustering/01-einfuehrung-kmeans/de.md","II.4.4.3",[16],[],{"key":925,"slug":926,"title":927,"cleanTitle":928,"numberedTitle":929,"description":930,"path":931,"basePath":932,"filePath":933,"pageType":32,"hidden":13,"effectiveHidden":13,"order":74,"depth":74,"number":934,"ownAudience":16,"audiences":935,"coverDeLight":18,"coverEnLight":19,"coverDeDark":20,"coverEnDark":21,"children":936},"08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/02-einfuehrung-dbscan","02-einfuehrung-dbscan","02-Einführung in DBSCAN Clustering","Einführung in DBSCAN Clustering","II.4.4.4 Einführung in DBSCAN Clustering","Grundlagen und interaktive Visualisierung des DBSCAN Algorithmus.","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/02-einfuehrung-dbscan/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/clustering/02-einfuehrung-dbscan","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/clustering/02-einfuehrung-dbscan/de.md","II.4.4.4",[16],[],{"key":938,"slug":939,"title":940,"cleanTitle":940,"numberedTitle":941,"description":942,"path":943,"basePath":944,"filePath":945,"pageType":58,"hidden":13,"effectiveHidden":13,"order":-4,"depth":59,"number":946,"ownAudience":62,"audiences":947,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":948},"08_kuenstlicheintelligenz/05_unsupervisedlearning/dimensionalityreduction","dimensionalityreduction","Dimensionsreduktion","II.4.5 Dimensionsreduktion","Unterseite zu Dimensionsreduktion","/08_kuenstlicheintelligenz/05_unsupervisedlearning/dimensionalityreduction/de","/08_kuenstlicheintelligenz/05_unsupervisedlearning/dimensionalityreduction","content/08_KuenstlicheIntelligenz/05_unsupervisedlearning/dimensionalityreduction/de.md","II.4.5",[],[],{"key":950,"slug":951,"title":952,"cleanTitle":952,"numberedTitle":953,"description":954,"path":955,"basePath":956,"filePath":957,"pageType":12,"hidden":13,"effectiveHidden":13,"order":135,"depth":33,"number":958,"ownAudience":62,"audiences":959,"coverDeLight":284,"coverEnLight":285,"coverDeDark":286,"coverEnDark":287,"children":960},"08_kuenstlicheintelligenz/06_reinforcementlearning","06_reinforcementlearning","Verstärkendes Lernen","II.5 Verstärkendes Lernen","Unterseite zu Verstärkendes Lernen","/08_kuenstlicheintelligenz/06_reinforcementlearning/de","/08_kuenstlicheintelligenz/06_reinforcementlearning","content/08_KuenstlicheIntelligenz/06_reinforcementlearning/de.md","II.5",[16],[961,973,986],{"key":962,"slug":963,"title":964,"cleanTitle":964,"numberedTitle":965,"description":966,"path":967,"basePath":968,"filePath":969,"pageType":58,"hidden":13,"effectiveHidden":13,"order":14,"depth":59,"number":970,"ownAudience":62,"audiences":971,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":972},"08_kuenstlicheintelligenz/06_reinforcementlearning/rlfoundations","rlfoundations","Grundlagen des Reinforcement Learnings","II.5.1 Grundlagen des Reinforcement Learnings","Unterseite zu Grundlagen des Reinforcement Learnings","/08_kuenstlicheintelligenz/06_reinforcementlearning/rlfoundations/de","/08_kuenstlicheintelligenz/06_reinforcementlearning/rlfoundations","content/08_KuenstlicheIntelligenz/06_reinforcementlearning/rlfoundations/de.md","II.5.1",[],[],{"key":974,"slug":975,"title":976,"cleanTitle":977,"numberedTitle":978,"description":979,"path":980,"basePath":981,"filePath":982,"pageType":58,"hidden":13,"effectiveHidden":13,"order":33,"depth":59,"number":983,"ownAudience":16,"audiences":984,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":985},"08_kuenstlicheintelligenz/06_reinforcementlearning/02-werte-lernen","02-werte-lernen","02-Einführung in value-based Reinforcement Learning","Einführung in value-based Reinforcement Learning","II.5.2 Einführung in value-based Reinforcement Learning","Grundlagen und interaktive Visualisierung von Q-Learning für das NIM-Spiel.","/08_kuenstlicheintelligenz/06_reinforcementlearning/02-werte-lernen/de","/08_kuenstlicheintelligenz/06_reinforcementlearning/02-werte-lernen","content/08_KuenstlicheIntelligenz/06_reinforcementlearning/02-werte-lernen/de.md","II.5.2",[16],[],{"key":987,"slug":988,"title":989,"cleanTitle":990,"numberedTitle":991,"description":992,"path":993,"basePath":994,"filePath":995,"pageType":32,"hidden":13,"effectiveHidden":13,"order":59,"depth":59,"number":996,"ownAudience":16,"audiences":997,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":998},"08_kuenstlicheintelligenz/06_reinforcementlearning/01-strategien-lernen","01-strategien-lernen","01-Einführung in policy-based Reinforcement Learning","Einführung in policy-based Reinforcement Learning","II.5.3 Einführung in policy-based Reinforcement Learning","Grundlagen und interaktive Visualisierung einer Adaption von MENACE für das NIM-Spiel.","/08_kuenstlicheintelligenz/06_reinforcementlearning/01-strategien-lernen/de","/08_kuenstlicheintelligenz/06_reinforcementlearning/01-strategien-lernen","content/08_KuenstlicheIntelligenz/06_reinforcementlearning/01-strategien-lernen/de.md","II.5.3",[16],[],{"key":1000,"slug":1000,"title":1001,"cleanTitle":1001,"numberedTitle":1001,"description":62,"path":62,"basePath":1002,"filePath":62,"pageType":62,"hidden":13,"effectiveHidden":13,"order":-4,"depth":14,"number":62,"ownAudience":62,"audiences":1003,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":1004},"_info","Info","/_info",[16],[1005,1016,1027,1038],{"key":1006,"slug":1007,"title":1008,"cleanTitle":1008,"numberedTitle":1008,"description":1009,"path":1010,"basePath":1011,"filePath":1012,"pageType":32,"hidden":13,"effectiveHidden":13,"order":1013,"depth":33,"number":62,"ownAudience":16,"audiences":1014,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":1015},"_info/10_datenschutz","10_datenschutz","Datenschutzerklärung","Informationen zum Datenschutz und zur Verarbeitung personenbezogener Daten.","/_info/10_datenschutz/de","/_info/10_datenschutz","content/_Info/10_Datenschutz/de.md",10,[16],[],{"key":1017,"slug":1018,"title":1019,"cleanTitle":1019,"numberedTitle":1019,"description":1020,"path":1021,"basePath":1022,"filePath":1023,"pageType":32,"hidden":13,"effectiveHidden":13,"order":1024,"depth":33,"number":62,"ownAudience":16,"audiences":1025,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":1026},"_info/11_impressum","11_impressum","Impressum","Impressum fuer das interaktive Buch.","/_info/11_impressum/de","/_info/11_impressum","content/_Info/11_Impressum/de.md",11,[16],[],{"key":1028,"slug":1029,"title":1030,"cleanTitle":1030,"numberedTitle":1030,"description":1031,"path":1032,"basePath":1033,"filePath":1034,"pageType":32,"hidden":13,"effectiveHidden":13,"order":1035,"depth":33,"number":62,"ownAudience":16,"audiences":1036,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":1037},"_info/12_lizenzenunddrittanbieter","12_lizenzenunddrittanbieter","Lizenzen & Drittanbieter","Übersicht der verwendeten Open-Source-Komponenten, Lizenzen und Datenschutz-Hinweise.","/_info/12_lizenzenunddrittanbieter/de","/_info/12_lizenzenunddrittanbieter","content/_Info/12_LizenzenUndDrittanbieter/de.md",12,[16],[],{"key":1039,"slug":1040,"title":1041,"cleanTitle":1041,"numberedTitle":1041,"description":1042,"path":1043,"basePath":1044,"filePath":1045,"pageType":58,"hidden":13,"effectiveHidden":13,"order":1046,"depth":33,"number":62,"ownAudience":16,"audiences":1047,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":1048},"_info/13_mailinglisteundnewsletter","13_mailinglisteundnewsletter","Mailingliste und Newsletter","Benachrichtigung über Neuigkeiten","/_info/13_mailinglisteundnewsletter/de","/_info/13_mailinglisteundnewsletter","content/_Info/13_MailingListeUndNewsLetter/de.md",13,[16],[1049,1061],{"key":1050,"slug":1051,"title":1052,"cleanTitle":1052,"numberedTitle":1053,"description":1054,"path":1055,"basePath":1056,"filePath":1057,"pageType":32,"hidden":13,"effectiveHidden":13,"order":-4,"depth":59,"number":1058,"ownAudience":16,"audiences":1059,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":1060},"_info/13_mailinglisteundnewsletter/ifk","ifk","Mailingliste Informatiklehrer Köln und Umgebung","1 Mailingliste Informatiklehrer Köln und Umgebung","Diskussion und Austausch in der weiteren Kölner Region","/_info/13_mailinglisteundnewsletter/ifk/de","/_info/13_mailinglisteundnewsletter/ifk","content/_Info/13_MailingListeUndNewsLetter/ifk/de.md","1",[16],[],{"key":1062,"slug":1063,"title":1064,"cleanTitle":1064,"numberedTitle":1065,"description":1066,"path":1067,"basePath":1068,"filePath":1069,"pageType":32,"hidden":13,"effectiveHidden":13,"order":-4,"depth":59,"number":1070,"ownAudience":16,"audiences":1071,"coverDeLight":62,"coverEnLight":62,"coverDeDark":62,"coverEnDark":62,"children":1072},"_info/13_mailinglisteundnewsletter/newsletter","newsletter","Newsletter","2 Newsletter","Anmeldung zum Newsletter","/_info/13_mailinglisteundnewsletter/newsletter/de","/_info/13_mailinglisteundnewsletter/newsletter","content/_Info/13_MailingListeUndNewsLetter/newsletter/de.md","2",[16],[],{"_path":196,"_dir":192,"_draft":13,"_partial":13,"_locale":62,"title":193,"description":195,"navigation":1074,"author":1075,"audience":16,"pageType":32,"order":59,"body":1076,"_type":3405,"_id":3406,"_source":32,"_file":3407,"_stem":3408,"_extension":3409},true,"HM_JDS",{"type":1077,"children":1078,"toc":3365},"root",[1079,1087,1093,1100,1105,1125,1130,1154,1160,1182,1215,1220,1226,1231,1270,1275,1281,1288,1293,1406,1411,1417,1422,1564,1570,1575,1819,1824,1830,1843,1848,1878,1883,1913,1918,1924,1936,1954,1959,1965,1970,1975,2005,2010,2016,2021,2053,2058,2064,2099,2105,2110,2115,2138,2143,2149,2202,2208,2259,2265,2270,2293,2298,2304,2309,2315,2320,2325,2348,2353,2359,2364,2386,2391,2397,2402,2407,2435,2440,2446,2459,2472,2477,2483,2496,2526,2539,2545,2550,2555,2568,2573,2586,2592,2870,2875,2881,2886,2906,2911,2917,2945,2950,2956,2961,3000,3005,3011,3039,3044,3050,3055,3096,3101,3107,3112,3130,3135,3141,3146,3152,3157,3162,3190,3195,3213,3218,3224,3254,3259,3265,3270,3293,3298,3316,3321,3327,3332,3338,3343,3349,3354,3359],{"type":1080,"tag":1081,"props":1082,"children":1084},"element","h1",{"id":1083},"strukturieren-mit-methoden",[1085],{"type":1086,"value":193},"text",{"type":1080,"tag":1088,"props":1089,"children":1090},"p",{},[1091],{"type":1086,"value":1092},"Dieses Kapitel basiert auf dem Arbeitsblatt \"Strukturieren mit Methoden\". Die Ausgangsidee dort ist sehr klar: Ein funktionierender, aber monolithischer Quelltext soll so umgebaut werden, dass mehrere kleine, gut benannte Hilfsmethoden entstehen.",{"type":1080,"tag":1094,"props":1095,"children":1097},"h2",{"id":1096},"warum-strukturierung-mehr-ist-als-schoenheit",[1098],{"type":1086,"value":1099},"Warum Strukturierung mehr ist als Schoenheit",{"type":1080,"tag":1088,"props":1101,"children":1102},{},[1103],{"type":1086,"value":1104},"Viele Einsteigerprogramme laufen zwar korrekt, sind aber schwer lesbar und kaum erweiterbar. Ursachen sind oft:",{"type":1080,"tag":1106,"props":1107,"children":1108},"ul",{},[1109,1115,1120],{"type":1080,"tag":1110,"props":1111,"children":1112},"li",{},[1113],{"type":1086,"value":1114},"zu lange Methoden",{"type":1080,"tag":1110,"props":1116,"children":1117},{},[1118],{"type":1086,"value":1119},"gemischte Verantwortlichkeiten",{"type":1080,"tag":1110,"props":1121,"children":1122},{},[1123],{"type":1086,"value":1124},"schwer testbare Einzelschritte",{"type":1080,"tag":1088,"props":1126,"children":1127},{},[1128],{"type":1086,"value":1129},"Die Zerlegung in Teilmethoden verbessert:",{"type":1080,"tag":1131,"props":1132,"children":1133},"ol",{},[1134,1139,1144,1149],{"type":1080,"tag":1110,"props":1135,"children":1136},{},[1137],{"type":1086,"value":1138},"Lesbarkeit",{"type":1080,"tag":1110,"props":1140,"children":1141},{},[1142],{"type":1086,"value":1143},"Testbarkeit",{"type":1080,"tag":1110,"props":1145,"children":1146},{},[1147],{"type":1086,"value":1148},"Wiederverwendbarkeit",{"type":1080,"tag":1110,"props":1150,"children":1151},{},[1152],{"type":1086,"value":1153},"Fehlersuche",{"type":1080,"tag":1094,"props":1155,"children":1157},{"id":1156},"ausgangsbeispiel-aus-dem-arbeitsblatt",[1158],{"type":1086,"value":1159},"Ausgangsbeispiel aus dem Arbeitsblatt",{"type":1080,"tag":1088,"props":1161,"children":1162},{},[1163,1165,1172,1174,1180],{"type":1086,"value":1164},"Das Blatt verwendet eine Klasse ",{"type":1080,"tag":1166,"props":1167,"children":1169},"code",{"className":1168},[],[1170],{"type":1086,"value":1171},"StatistikBerechner",{"type":1086,"value":1173},", in der eine Methode ",{"type":1080,"tag":1166,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":1086,"value":1179},"berechneStatistiken(int[] zahlen)",{"type":1086,"value":1181}," alles auf einmal erledigt:",{"type":1080,"tag":1106,"props":1183,"children":1184},{},[1185,1190,1195,1200,1205,1210],{"type":1080,"tag":1110,"props":1186,"children":1187},{},[1188],{"type":1086,"value":1189},"Eingabe pruefen",{"type":1080,"tag":1110,"props":1191,"children":1192},{},[1193],{"type":1086,"value":1194},"Summe berechnen",{"type":1080,"tag":1110,"props":1196,"children":1197},{},[1198],{"type":1086,"value":1199},"Minimum bestimmen",{"type":1080,"tag":1110,"props":1201,"children":1202},{},[1203],{"type":1086,"value":1204},"Maximum bestimmen",{"type":1080,"tag":1110,"props":1206,"children":1207},{},[1208],{"type":1086,"value":1209},"Durchschnitt berechnen",{"type":1080,"tag":1110,"props":1211,"children":1212},{},[1213],{"type":1086,"value":1214},"Ausgabe erzeugen",{"type":1080,"tag":1088,"props":1216,"children":1217},{},[1218],{"type":1086,"value":1219},"Didaktisch ist genau das der richtige Startpunkt fuer Refactoring.",{"type":1080,"tag":1094,"props":1221,"children":1223},{"id":1222},"zielstruktur-laut-aufgabenstellung",[1224],{"type":1086,"value":1225},"Zielstruktur laut Aufgabenstellung",{"type":1080,"tag":1088,"props":1227,"children":1228},{},[1229],{"type":1086,"value":1230},"Das Arbeitsblatt fordert konkret diese Hilfsmethoden:",{"type":1080,"tag":1106,"props":1232,"children":1233},{},[1234,1243,1252,1261],{"type":1080,"tag":1110,"props":1235,"children":1236},{},[1237],{"type":1080,"tag":1166,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":1086,"value":1242},"private int berechneSumme(int[] zahlen)",{"type":1080,"tag":1110,"props":1244,"children":1245},{},[1246],{"type":1080,"tag":1166,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":1086,"value":1251},"private double berechneDurchschnitt(int[] zahlen, int summe)",{"type":1080,"tag":1110,"props":1253,"children":1254},{},[1255],{"type":1080,"tag":1166,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":1086,"value":1260},"private int[] berechneMinUndMax(int[] zahlen)",{"type":1080,"tag":1110,"props":1262,"children":1263},{},[1264],{"type":1080,"tag":1166,"props":1265,"children":1267},{"className":1266},[],[1268],{"type":1086,"value":1269},"private void ausgabeStatistiken(int summe, double durchschnitt, int minimum, int maximum)",{"type":1080,"tag":1088,"props":1271,"children":1272},{},[1273],{"type":1086,"value":1274},"Diese Signaturen zeigen bereits ein gutes Prinzip: Jede Methode bekommt eine eindeutige Verantwortung.",{"type":1080,"tag":1094,"props":1276,"children":1278},{"id":1277},"refactoring-schritt-fuer-refactoring-schritt",[1279],{"type":1086,"value":1280},"Refactoring-Schritt fuer Refactoring-Schritt",{"type":1080,"tag":1282,"props":1283,"children":1285},"h3",{"id":1284},"schritt-1-eingabepruefung-klar-isolieren",[1286],{"type":1086,"value":1287},"Schritt 1: Eingabepruefung klar isolieren",{"type":1080,"tag":1088,"props":1289,"children":1290},{},[1291],{"type":1086,"value":1292},"Die Hauptmethode sollte frueh entscheiden, ob gerechnet werden kann.",{"type":1080,"tag":1294,"props":1295,"children":1299},"pre",{"className":1296,"code":1297,"language":1298,"meta":62,"style":62},"language-java shiki shiki-themes github-light github-dark","if (zahlen == null || zahlen.length == 0) {\n    System.out.println(\"Keine Daten verfuegbar.\");\n    return;\n}\n","java",[1300],{"type":1080,"tag":1166,"props":1301,"children":1302},{"__ignoreMap":62},[1303,1355,1385,1398],{"type":1080,"tag":1304,"props":1305,"children":1307},"span",{"class":1306,"line":14},"line",[1308,1314,1320,1325,1331,1336,1341,1345,1350],{"type":1080,"tag":1304,"props":1309,"children":1311},{"style":1310},"--shiki-default:#D73A49;--shiki-dark:#F97583",[1312],{"type":1086,"value":1313},"if",{"type":1080,"tag":1304,"props":1315,"children":1317},{"style":1316},"--shiki-default:#24292E;--shiki-dark:#E1E4E8",[1318],{"type":1086,"value":1319}," (zahlen ",{"type":1080,"tag":1304,"props":1321,"children":1322},{"style":1310},[1323],{"type":1086,"value":1324},"==",{"type":1080,"tag":1304,"props":1326,"children":1328},{"style":1327},"--shiki-default:#005CC5;--shiki-dark:#79B8FF",[1329],{"type":1086,"value":1330}," null",{"type":1080,"tag":1304,"props":1332,"children":1333},{"style":1310},[1334],{"type":1086,"value":1335}," ||",{"type":1080,"tag":1304,"props":1337,"children":1338},{"style":1316},[1339],{"type":1086,"value":1340}," zahlen.length ",{"type":1080,"tag":1304,"props":1342,"children":1343},{"style":1310},[1344],{"type":1086,"value":1324},{"type":1080,"tag":1304,"props":1346,"children":1347},{"style":1327},[1348],{"type":1086,"value":1349}," 0",{"type":1080,"tag":1304,"props":1351,"children":1352},{"style":1316},[1353],{"type":1086,"value":1354},") {\n",{"type":1080,"tag":1304,"props":1356,"children":1357},{"class":1306,"line":33},[1358,1363,1369,1374,1380],{"type":1080,"tag":1304,"props":1359,"children":1360},{"style":1316},[1361],{"type":1086,"value":1362},"    System.out.",{"type":1080,"tag":1304,"props":1364,"children":1366},{"style":1365},"--shiki-default:#6F42C1;--shiki-dark:#B392F0",[1367],{"type":1086,"value":1368},"println",{"type":1080,"tag":1304,"props":1370,"children":1371},{"style":1316},[1372],{"type":1086,"value":1373},"(",{"type":1080,"tag":1304,"props":1375,"children":1377},{"style":1376},"--shiki-default:#032F62;--shiki-dark:#9ECBFF",[1378],{"type":1086,"value":1379},"\"Keine Daten verfuegbar.\"",{"type":1080,"tag":1304,"props":1381,"children":1382},{"style":1316},[1383],{"type":1086,"value":1384},");\n",{"type":1080,"tag":1304,"props":1386,"children":1387},{"class":1306,"line":59},[1388,1393],{"type":1080,"tag":1304,"props":1389,"children":1390},{"style":1310},[1391],{"type":1086,"value":1392},"    return",{"type":1080,"tag":1304,"props":1394,"children":1395},{"style":1316},[1396],{"type":1086,"value":1397},";\n",{"type":1080,"tag":1304,"props":1399,"children":1400},{"class":1306,"line":74},[1401],{"type":1080,"tag":1304,"props":1402,"children":1403},{"style":1316},[1404],{"type":1086,"value":1405},"}\n",{"type":1080,"tag":1088,"props":1407,"children":1408},{},[1409],{"type":1086,"value":1410},"Damit sind Randfaelle sofort abgearbeitet.",{"type":1080,"tag":1282,"props":1412,"children":1414},{"id":1413},"schritt-2-berechnungen-auslagern",[1415],{"type":1086,"value":1416},"Schritt 2: Berechnungen auslagern",{"type":1080,"tag":1088,"props":1418,"children":1419},{},[1420],{"type":1086,"value":1421},"Alle mathematischen Teilaufgaben in private Methoden verschieben.",{"type":1080,"tag":1294,"props":1423,"children":1425},{"className":1296,"code":1424,"language":1298,"meta":62,"style":62},"private int berechneSumme(int[] zahlen) {\n    int summe = 0;\n    for (int z : zahlen) {\n        summe += z;\n    }\n    return summe;\n}\n",[1426],{"type":1080,"tag":1166,"props":1427,"children":1428},{"__ignoreMap":62},[1429,1461,1487,1519,1537,1545,1557],{"type":1080,"tag":1304,"props":1430,"children":1431},{"class":1306,"line":14},[1432,1437,1442,1447,1451,1456],{"type":1080,"tag":1304,"props":1433,"children":1434},{"style":1310},[1435],{"type":1086,"value":1436},"private",{"type":1080,"tag":1304,"props":1438,"children":1439},{"style":1310},[1440],{"type":1086,"value":1441}," int",{"type":1080,"tag":1304,"props":1443,"children":1444},{"style":1365},[1445],{"type":1086,"value":1446}," berechneSumme",{"type":1080,"tag":1304,"props":1448,"children":1449},{"style":1316},[1450],{"type":1086,"value":1373},{"type":1080,"tag":1304,"props":1452,"children":1453},{"style":1310},[1454],{"type":1086,"value":1455},"int",{"type":1080,"tag":1304,"props":1457,"children":1458},{"style":1316},[1459],{"type":1086,"value":1460},"[] zahlen) {\n",{"type":1080,"tag":1304,"props":1462,"children":1463},{"class":1306,"line":33},[1464,1469,1474,1479,1483],{"type":1080,"tag":1304,"props":1465,"children":1466},{"style":1310},[1467],{"type":1086,"value":1468},"    int",{"type":1080,"tag":1304,"props":1470,"children":1471},{"style":1316},[1472],{"type":1086,"value":1473}," summe ",{"type":1080,"tag":1304,"props":1475,"children":1476},{"style":1310},[1477],{"type":1086,"value":1478},"=",{"type":1080,"tag":1304,"props":1480,"children":1481},{"style":1327},[1482],{"type":1086,"value":1349},{"type":1080,"tag":1304,"props":1484,"children":1485},{"style":1316},[1486],{"type":1086,"value":1397},{"type":1080,"tag":1304,"props":1488,"children":1489},{"class":1306,"line":59},[1490,1495,1500,1504,1509,1514],{"type":1080,"tag":1304,"props":1491,"children":1492},{"style":1310},[1493],{"type":1086,"value":1494},"    for",{"type":1080,"tag":1304,"props":1496,"children":1497},{"style":1316},[1498],{"type":1086,"value":1499}," (",{"type":1080,"tag":1304,"props":1501,"children":1502},{"style":1310},[1503],{"type":1086,"value":1455},{"type":1080,"tag":1304,"props":1505,"children":1506},{"style":1316},[1507],{"type":1086,"value":1508}," z ",{"type":1080,"tag":1304,"props":1510,"children":1511},{"style":1310},[1512],{"type":1086,"value":1513},":",{"type":1080,"tag":1304,"props":1515,"children":1516},{"style":1316},[1517],{"type":1086,"value":1518}," zahlen) {\n",{"type":1080,"tag":1304,"props":1520,"children":1521},{"class":1306,"line":74},[1522,1527,1532],{"type":1080,"tag":1304,"props":1523,"children":1524},{"style":1316},[1525],{"type":1086,"value":1526},"        summe ",{"type":1080,"tag":1304,"props":1528,"children":1529},{"style":1310},[1530],{"type":1086,"value":1531},"+=",{"type":1080,"tag":1304,"props":1533,"children":1534},{"style":1316},[1535],{"type":1086,"value":1536}," z;\n",{"type":1080,"tag":1304,"props":1538,"children":1539},{"class":1306,"line":135},[1540],{"type":1080,"tag":1304,"props":1541,"children":1542},{"style":1316},[1543],{"type":1086,"value":1544},"    }\n",{"type":1080,"tag":1304,"props":1546,"children":1547},{"class":1306,"line":160},[1548,1552],{"type":1080,"tag":1304,"props":1549,"children":1550},{"style":1310},[1551],{"type":1086,"value":1392},{"type":1080,"tag":1304,"props":1553,"children":1554},{"style":1316},[1555],{"type":1086,"value":1556}," summe;\n",{"type":1080,"tag":1304,"props":1558,"children":1559},{"class":1306,"line":173},[1560],{"type":1080,"tag":1304,"props":1561,"children":1562},{"style":1316},[1563],{"type":1086,"value":1405},{"type":1080,"tag":1282,"props":1565,"children":1567},{"id":1566},"schritt-3-zusammensetzen-in-hauptmethode",[1568],{"type":1086,"value":1569},"Schritt 3: Zusammensetzen in Hauptmethode",{"type":1080,"tag":1088,"props":1571,"children":1572},{},[1573],{"type":1086,"value":1574},"Die Hauptmethode beschreibt danach nur noch den Ablauf.",{"type":1080,"tag":1294,"props":1576,"children":1578},{"className":1296,"code":1577,"language":1298,"meta":62,"style":62},"public void berechneStatistiken(int[] zahlen) {\n    if (zahlen == null || zahlen.length == 0) {\n        System.out.println(\"Keine Daten verfuegbar.\");\n        return;\n    }\n\n    int summe = berechneSumme(zahlen);\n    double durchschnitt = berechneDurchschnitt(zahlen, summe);\n    int[] minMax = berechneMinUndMax(zahlen);\n    ausgabeStatistiken(summe, durchschnitt, minMax[0], minMax[1]);\n}\n",[1579],{"type":1080,"tag":1166,"props":1580,"children":1581},{"__ignoreMap":62},[1582,1612,1652,1676,1688,1695,1703,1727,1754,1780,1812],{"type":1080,"tag":1304,"props":1583,"children":1584},{"class":1306,"line":14},[1585,1590,1595,1600,1604,1608],{"type":1080,"tag":1304,"props":1586,"children":1587},{"style":1310},[1588],{"type":1086,"value":1589},"public",{"type":1080,"tag":1304,"props":1591,"children":1592},{"style":1310},[1593],{"type":1086,"value":1594}," void",{"type":1080,"tag":1304,"props":1596,"children":1597},{"style":1365},[1598],{"type":1086,"value":1599}," berechneStatistiken",{"type":1080,"tag":1304,"props":1601,"children":1602},{"style":1316},[1603],{"type":1086,"value":1373},{"type":1080,"tag":1304,"props":1605,"children":1606},{"style":1310},[1607],{"type":1086,"value":1455},{"type":1080,"tag":1304,"props":1609,"children":1610},{"style":1316},[1611],{"type":1086,"value":1460},{"type":1080,"tag":1304,"props":1613,"children":1614},{"class":1306,"line":33},[1615,1620,1624,1628,1632,1636,1640,1644,1648],{"type":1080,"tag":1304,"props":1616,"children":1617},{"style":1310},[1618],{"type":1086,"value":1619},"    if",{"type":1080,"tag":1304,"props":1621,"children":1622},{"style":1316},[1623],{"type":1086,"value":1319},{"type":1080,"tag":1304,"props":1625,"children":1626},{"style":1310},[1627],{"type":1086,"value":1324},{"type":1080,"tag":1304,"props":1629,"children":1630},{"style":1327},[1631],{"type":1086,"value":1330},{"type":1080,"tag":1304,"props":1633,"children":1634},{"style":1310},[1635],{"type":1086,"value":1335},{"type":1080,"tag":1304,"props":1637,"children":1638},{"style":1316},[1639],{"type":1086,"value":1340},{"type":1080,"tag":1304,"props":1641,"children":1642},{"style":1310},[1643],{"type":1086,"value":1324},{"type":1080,"tag":1304,"props":1645,"children":1646},{"style":1327},[1647],{"type":1086,"value":1349},{"type":1080,"tag":1304,"props":1649,"children":1650},{"style":1316},[1651],{"type":1086,"value":1354},{"type":1080,"tag":1304,"props":1653,"children":1654},{"class":1306,"line":59},[1655,1660,1664,1668,1672],{"type":1080,"tag":1304,"props":1656,"children":1657},{"style":1316},[1658],{"type":1086,"value":1659},"        System.out.",{"type":1080,"tag":1304,"props":1661,"children":1662},{"style":1365},[1663],{"type":1086,"value":1368},{"type":1080,"tag":1304,"props":1665,"children":1666},{"style":1316},[1667],{"type":1086,"value":1373},{"type":1080,"tag":1304,"props":1669,"children":1670},{"style":1376},[1671],{"type":1086,"value":1379},{"type":1080,"tag":1304,"props":1673,"children":1674},{"style":1316},[1675],{"type":1086,"value":1384},{"type":1080,"tag":1304,"props":1677,"children":1678},{"class":1306,"line":74},[1679,1684],{"type":1080,"tag":1304,"props":1680,"children":1681},{"style":1310},[1682],{"type":1086,"value":1683},"        return",{"type":1080,"tag":1304,"props":1685,"children":1686},{"style":1316},[1687],{"type":1086,"value":1397},{"type":1080,"tag":1304,"props":1689,"children":1690},{"class":1306,"line":135},[1691],{"type":1080,"tag":1304,"props":1692,"children":1693},{"style":1316},[1694],{"type":1086,"value":1544},{"type":1080,"tag":1304,"props":1696,"children":1697},{"class":1306,"line":160},[1698],{"type":1080,"tag":1304,"props":1699,"children":1700},{"emptyLinePlaceholder":1074},[1701],{"type":1086,"value":1702},"\n",{"type":1080,"tag":1304,"props":1704,"children":1705},{"class":1306,"line":173},[1706,1710,1714,1718,1722],{"type":1080,"tag":1304,"props":1707,"children":1708},{"style":1310},[1709],{"type":1086,"value":1468},{"type":1080,"tag":1304,"props":1711,"children":1712},{"style":1316},[1713],{"type":1086,"value":1473},{"type":1080,"tag":1304,"props":1715,"children":1716},{"style":1310},[1717],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":1719,"children":1720},{"style":1365},[1721],{"type":1086,"value":1446},{"type":1080,"tag":1304,"props":1723,"children":1724},{"style":1316},[1725],{"type":1086,"value":1726},"(zahlen);\n",{"type":1080,"tag":1304,"props":1728,"children":1729},{"class":1306,"line":186},[1730,1735,1740,1744,1749],{"type":1080,"tag":1304,"props":1731,"children":1732},{"style":1310},[1733],{"type":1086,"value":1734},"    double",{"type":1080,"tag":1304,"props":1736,"children":1737},{"style":1316},[1738],{"type":1086,"value":1739}," durchschnitt ",{"type":1080,"tag":1304,"props":1741,"children":1742},{"style":1310},[1743],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":1745,"children":1746},{"style":1365},[1747],{"type":1086,"value":1748}," berechneDurchschnitt",{"type":1080,"tag":1304,"props":1750,"children":1751},{"style":1316},[1752],{"type":1086,"value":1753},"(zahlen, summe);\n",{"type":1080,"tag":1304,"props":1755,"children":1757},{"class":1306,"line":1756},9,[1758,1762,1767,1771,1776],{"type":1080,"tag":1304,"props":1759,"children":1760},{"style":1310},[1761],{"type":1086,"value":1468},{"type":1080,"tag":1304,"props":1763,"children":1764},{"style":1316},[1765],{"type":1086,"value":1766},"[] minMax ",{"type":1080,"tag":1304,"props":1768,"children":1769},{"style":1310},[1770],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":1772,"children":1773},{"style":1365},[1774],{"type":1086,"value":1775}," berechneMinUndMax",{"type":1080,"tag":1304,"props":1777,"children":1778},{"style":1316},[1779],{"type":1086,"value":1726},{"type":1080,"tag":1304,"props":1781,"children":1782},{"class":1306,"line":1013},[1783,1788,1793,1798,1803,1807],{"type":1080,"tag":1304,"props":1784,"children":1785},{"style":1365},[1786],{"type":1086,"value":1787},"    ausgabeStatistiken",{"type":1080,"tag":1304,"props":1789,"children":1790},{"style":1316},[1791],{"type":1086,"value":1792},"(summe, durchschnitt, minMax[",{"type":1080,"tag":1304,"props":1794,"children":1795},{"style":1327},[1796],{"type":1086,"value":1797},"0",{"type":1080,"tag":1304,"props":1799,"children":1800},{"style":1316},[1801],{"type":1086,"value":1802},"], minMax[",{"type":1080,"tag":1304,"props":1804,"children":1805},{"style":1327},[1806],{"type":1086,"value":1058},{"type":1080,"tag":1304,"props":1808,"children":1809},{"style":1316},[1810],{"type":1086,"value":1811},"]);\n",{"type":1080,"tag":1304,"props":1813,"children":1814},{"class":1306,"line":1024},[1815],{"type":1080,"tag":1304,"props":1816,"children":1817},{"style":1316},[1818],{"type":1086,"value":1405},{"type":1080,"tag":1088,"props":1820,"children":1821},{},[1822],{"type":1086,"value":1823},"Das ist deutlich leichter zu lesen als die monolithische Variante.",{"type":1080,"tag":1094,"props":1825,"children":1827},{"id":1826},"gute-methodennamen-als-dokumentation",[1828],{"type":1086,"value":1829},"Gute Methodennamen als Dokumentation",{"type":1080,"tag":1088,"props":1831,"children":1832},{},[1833,1835,1841],{"type":1086,"value":1834},"Im Arbeitsblatt wird indirekt ein zentraler Stilpunkt trainiert: Methodenname soll die ",{"type":1080,"tag":1836,"props":1837,"children":1838},"strong",{},[1839],{"type":1086,"value":1840},"Absicht",{"type":1086,"value":1842}," beschreiben.",{"type":1080,"tag":1088,"props":1844,"children":1845},{},[1846],{"type":1086,"value":1847},"Gut:",{"type":1080,"tag":1106,"props":1849,"children":1850},{},[1851,1860,1869],{"type":1080,"tag":1110,"props":1852,"children":1853},{},[1854],{"type":1080,"tag":1166,"props":1855,"children":1857},{"className":1856},[],[1858],{"type":1086,"value":1859},"berechneSumme",{"type":1080,"tag":1110,"props":1861,"children":1862},{},[1863],{"type":1080,"tag":1166,"props":1864,"children":1866},{"className":1865},[],[1867],{"type":1086,"value":1868},"berechneDurchschnitt",{"type":1080,"tag":1110,"props":1870,"children":1871},{},[1872],{"type":1080,"tag":1166,"props":1873,"children":1875},{"className":1874},[],[1876],{"type":1086,"value":1877},"ausgabeStatistiken",{"type":1080,"tag":1088,"props":1879,"children":1880},{},[1881],{"type":1086,"value":1882},"Schwach:",{"type":1080,"tag":1106,"props":1884,"children":1885},{},[1886,1895,1904],{"type":1080,"tag":1110,"props":1887,"children":1888},{},[1889],{"type":1080,"tag":1166,"props":1890,"children":1892},{"className":1891},[],[1893],{"type":1086,"value":1894},"mach1",{"type":1080,"tag":1110,"props":1896,"children":1897},{},[1898],{"type":1080,"tag":1166,"props":1899,"children":1901},{"className":1900},[],[1902],{"type":1086,"value":1903},"helper",{"type":1080,"tag":1110,"props":1905,"children":1906},{},[1907],{"type":1080,"tag":1166,"props":1908,"children":1910},{"className":1909},[],[1911],{"type":1086,"value":1912},"runStuff",{"type":1080,"tag":1088,"props":1914,"children":1915},{},[1916],{"type":1086,"value":1917},"Je klarer Namen sind, desto weniger Kommentare braucht der Code.",{"type":1080,"tag":1094,"props":1919,"children":1921},{"id":1920},"private-hilfsmethoden-und-kapselung",[1922],{"type":1086,"value":1923},"Private Hilfsmethoden und Kapselung",{"type":1080,"tag":1088,"props":1925,"children":1926},{},[1927,1929,1934],{"type":1086,"value":1928},"Dass die Zielmethoden ",{"type":1080,"tag":1166,"props":1930,"children":1932},{"className":1931},[],[1933],{"type":1086,"value":1436},{"type":1086,"value":1935}," sind, ist kein Zufall.",{"type":1080,"tag":1106,"props":1937,"children":1938},{},[1939,1944,1949],{"type":1080,"tag":1110,"props":1940,"children":1941},{},[1942],{"type":1086,"value":1943},"Sie sind interne Bausteine.",{"type":1080,"tag":1110,"props":1945,"children":1946},{},[1947],{"type":1086,"value":1948},"Externe Klassen sollen sie nicht direkt aufrufen.",{"type":1080,"tag":1110,"props":1950,"children":1951},{},[1952],{"type":1086,"value":1953},"Oeffentliche API bleibt klein und stabil.",{"type":1080,"tag":1088,"props":1955,"children":1956},{},[1957],{"type":1086,"value":1958},"Das ist sauberes Klassen-Design.",{"type":1080,"tag":1094,"props":1960,"children":1962},{"id":1961},"zusatzeffekt-einfachere-tests",[1963],{"type":1086,"value":1964},"Zusatzeffekt: einfachere Tests",{"type":1080,"tag":1088,"props":1966,"children":1967},{},[1968],{"type":1086,"value":1969},"Kleine Methoden lassen sich gezielter testen.",{"type":1080,"tag":1088,"props":1971,"children":1972},{},[1973],{"type":1086,"value":1974},"Beispiele:",{"type":1080,"tag":1106,"props":1976,"children":1977},{},[1978,1987,1996],{"type":1080,"tag":1110,"props":1979,"children":1980},{},[1981],{"type":1080,"tag":1166,"props":1982,"children":1984},{"className":1983},[],[1985],{"type":1086,"value":1986},"berechneSumme({1,2,3}) == 6",{"type":1080,"tag":1110,"props":1988,"children":1989},{},[1990],{"type":1080,"tag":1166,"props":1991,"children":1993},{"className":1992},[],[1994],{"type":1086,"value":1995},"berechneMinUndMax({7,2,9}) -> {2,9}",{"type":1080,"tag":1110,"props":1997,"children":1998},{},[1999],{"type":1080,"tag":1166,"props":2000,"children":2002},{"className":2001},[],[2003],{"type":1086,"value":2004},"berechneDurchschnitt({2,4,6}, 12) == 4.0",{"type":1080,"tag":1088,"props":2006,"children":2007},{},[2008],{"type":1086,"value":2009},"Wenn ein Test fehlschlaegt, ist sofort klar, welcher Teilschritt betroffen ist.",{"type":1080,"tag":1094,"props":2011,"children":2013},{"id":2012},"robustheit-bei-randfaellen",[2014],{"type":1086,"value":2015},"Robustheit bei Randfaellen",{"type":1080,"tag":1088,"props":2017,"children":2018},{},[2019],{"type":1086,"value":2020},"Refactoring ist eine gute Gelegenheit, Randfaelle bewusst mitzunehmen:",{"type":1080,"tag":1106,"props":2022,"children":2023},{},[2024,2033,2038,2043,2048],{"type":1080,"tag":1110,"props":2025,"children":2026},{},[2027],{"type":1080,"tag":1166,"props":2028,"children":2030},{"className":2029},[],[2031],{"type":1086,"value":2032},"null",{"type":1080,"tag":1110,"props":2034,"children":2035},{},[2036],{"type":1086,"value":2037},"leeres Array",{"type":1080,"tag":1110,"props":2039,"children":2040},{},[2041],{"type":1086,"value":2042},"sehr grosse Werte",{"type":1080,"tag":1110,"props":2044,"children":2045},{},[2046],{"type":1086,"value":2047},"negative Werte",{"type":1080,"tag":1110,"props":2049,"children":2050},{},[2051],{"type":1086,"value":2052},"alle Werte identisch",{"type":1080,"tag":1088,"props":2054,"children":2055},{},[2056],{"type":1086,"value":2057},"Diese Faelle sollten in den Methodenvertraegen klar sein.",{"type":1080,"tag":1094,"props":2059,"children":2061},{"id":2060},"strukturierungsprinzipien-aus-dem-kapitel",[2062],{"type":1086,"value":2063},"Strukturierungsprinzipien aus dem Kapitel",{"type":1080,"tag":1131,"props":2065,"children":2066},{},[2067,2072,2077,2082,2094],{"type":1080,"tag":1110,"props":2068,"children":2069},{},[2070],{"type":1086,"value":2071},"Eine Methode, eine Hauptverantwortung.",{"type":1080,"tag":1110,"props":2073,"children":2074},{},[2075],{"type":1086,"value":2076},"Wiederholte Logik in Hilfsmethoden auslagern.",{"type":1080,"tag":1110,"props":2078,"children":2079},{},[2080],{"type":1086,"value":2081},"Hauptablauf als gut lesbare Choreografie schreiben.",{"type":1080,"tag":1110,"props":2083,"children":2084},{},[2085,2087,2092],{"type":1086,"value":2086},"Interne Hilfsmethoden als ",{"type":1080,"tag":1166,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":1086,"value":1436},{"type":1086,"value":2093}," kapseln.",{"type":1080,"tag":1110,"props":2095,"children":2096},{},[2097],{"type":1086,"value":2098},"Fruehe Gueltigkeitspruefung statt spaeter Fehler.",{"type":1080,"tag":1094,"props":2100,"children":2102},{"id":2101},"uebertragung-auf-andere-aufgaben",[2103],{"type":1086,"value":2104},"Uebertragung auf andere Aufgaben",{"type":1080,"tag":1088,"props":2106,"children":2107},{},[2108],{"type":1086,"value":2109},"Das Blatt nennt als weiteres Szenario die Auswertung von Kundendaten (z. B. nach Gruppen getrennt).",{"type":1080,"tag":1088,"props":2111,"children":2112},{},[2113],{"type":1086,"value":2114},"Auch dort ist die Struktur identisch:",{"type":1080,"tag":1131,"props":2116,"children":2117},{},[2118,2123,2128,2133],{"type":1080,"tag":1110,"props":2119,"children":2120},{},[2121],{"type":1086,"value":2122},"vorbereiten",{"type":1080,"tag":1110,"props":2124,"children":2125},{},[2126],{"type":1086,"value":2127},"aufteilen",{"type":1080,"tag":1110,"props":2129,"children":2130},{},[2131],{"type":1086,"value":2132},"gruppenweise berechnen",{"type":1080,"tag":1110,"props":2134,"children":2135},{},[2136],{"type":1086,"value":2137},"Ergebnis ausgeben",{"type":1080,"tag":1088,"props":2139,"children":2140},{},[2141],{"type":1086,"value":2142},"Diese Form der Zerlegung ist fachunabhaengig und daher sehr wertvoll.",{"type":1080,"tag":1094,"props":2144,"children":2146},{"id":2145},"typische-antimuster",[2147],{"type":1086,"value":2148},"Typische Antimuster",{"type":1080,"tag":1131,"props":2150,"children":2151},{},[2152,2162,2172,2182,2192],{"type":1080,"tag":1110,"props":2153,"children":2154},{},[2155,2160],{"type":1080,"tag":1836,"props":2156,"children":2157},{},[2158],{"type":1086,"value":2159},"Monster-Methode",{"type":1086,"value":2161},"\nEine Methode mit 80+ Zeilen und mehreren Aufgaben.",{"type":1080,"tag":1110,"props":2163,"children":2164},{},[2165,2170],{"type":1080,"tag":1836,"props":2166,"children":2167},{},[2168],{"type":1086,"value":2169},"Copy-Paste statt Auslagern",{"type":1086,"value":2171},"\nAehnliche Berechnung mehrfach mit kleinen Abweichungen.",{"type":1080,"tag":1110,"props":2173,"children":2174},{},[2175,2180],{"type":1080,"tag":1836,"props":2176,"children":2177},{},[2178],{"type":1086,"value":2179},"Ausgabe und Berechnung untrennbar vermischt",{"type":1086,"value":2181},"\nSchwer testbar.",{"type":1080,"tag":1110,"props":2183,"children":2184},{},[2185,2190],{"type":1080,"tag":1836,"props":2186,"children":2187},{},[2188],{"type":1086,"value":2189},"Unklare Parameter",{"type":1086,"value":2191},"\nMethoden brauchen zu viele oder missverstaendliche Eingaben.",{"type":1080,"tag":1110,"props":2193,"children":2194},{},[2195,2200],{"type":1080,"tag":1836,"props":2196,"children":2197},{},[2198],{"type":1086,"value":2199},"Zu frueh zu feingranular",{"type":1086,"value":2201},"\nNicht jede Dreizeiler-Hilfsmethode ist automatisch besser.",{"type":1080,"tag":1094,"props":2203,"children":2205},{"id":2204},"erweiterte-uebungen",[2206],{"type":1086,"value":2207},"Erweiterte Uebungen",{"type":1080,"tag":1131,"props":2209,"children":2210},{},[2211,2224,2229,2242,2254],{"type":1080,"tag":1110,"props":2212,"children":2213},{},[2214,2216,2222],{"type":1086,"value":2215},"Refaktoriere eine Methode ",{"type":1080,"tag":1166,"props":2217,"children":2219},{"className":2218},[],[2220],{"type":1086,"value":2221},"analysiereNoten(int[] noten)",{"type":1086,"value":2223}," analog zu diesem Kapitel.",{"type":1080,"tag":1110,"props":2225,"children":2226},{},[2227],{"type":1086,"value":2228},"Trenne reine Berechnung von Konsolenausgabe.",{"type":1080,"tag":1110,"props":2230,"children":2231},{},[2232,2234,2240],{"type":1086,"value":2233},"Fuehre eine Methode ",{"type":1080,"tag":1166,"props":2235,"children":2237},{"className":2236},[],[2238],{"type":1086,"value":2239},"validiereEingabe(int[] werte)",{"type":1086,"value":2241}," ein.",{"type":1080,"tag":1110,"props":2243,"children":2244},{},[2245,2247,2252],{"type":1086,"value":2246},"Fuehre Tests fuer ",{"type":1080,"tag":1166,"props":2248,"children":2250},{"className":2249},[],[2251],{"type":1086,"value":2032},{"type":1086,"value":2253},", leeres Array und Einzelelement ein.",{"type":1080,"tag":1110,"props":2255,"children":2256},{},[2257],{"type":1086,"value":2258},"Vergleiche Laufzeit und Lesbarkeit vor/nach dem Refactoring.",{"type":1080,"tag":1094,"props":2260,"children":2262},{"id":2261},"zusammenfassung",[2263],{"type":1086,"value":2264},"Zusammenfassung",{"type":1080,"tag":1088,"props":2266,"children":2267},{},[2268],{"type":1086,"value":2269},"Das Arbeitsblatt zeigt mit einem einfachen Statistikbeispiel einen professionellen Kernprozess:",{"type":1080,"tag":1106,"props":2271,"children":2272},{},[2273,2278,2283,2288],{"type":1080,"tag":1110,"props":2274,"children":2275},{},[2276],{"type":1086,"value":2277},"funktionierenden Code analysieren",{"type":1080,"tag":1110,"props":2279,"children":2280},{},[2281],{"type":1086,"value":2282},"Verantwortlichkeiten trennen",{"type":1080,"tag":1110,"props":2284,"children":2285},{},[2286],{"type":1086,"value":2287},"in kleine Methoden zerlegen",{"type":1080,"tag":1110,"props":2289,"children":2290},{},[2291],{"type":1086,"value":2292},"Ergebnis robuster und besser testbar machen",{"type":1080,"tag":1088,"props":2294,"children":2295},{},[2296],{"type":1086,"value":2297},"Diese Kompetenz ist zentral fuer alle spaeteren groesseren Kapitel und Projekte.",{"type":1080,"tag":1094,"props":2299,"children":2301},{"id":2300},"abbildungen",[2302],{"type":1086,"value":2303},"Abbildungen",{"type":1080,"tag":1088,"props":2305,"children":2306},{},[2307],{"type":1086,"value":2308},"In der zugeordneten Datei wurden keine eingebetteten Bildobjekte gefunden.",{"type":1080,"tag":1094,"props":2310,"children":2312},{"id":2311},"von-funktioniert-zu-wartbar",[2313],{"type":1086,"value":2314},"Von \"funktioniert\" zu \"wartbar\"",{"type":1080,"tag":1088,"props":2316,"children":2317},{},[2318],{"type":1086,"value":2319},"Das Arbeitsblatt zeigt einen typischen Ist-Zustand: eine lange Methode, die korrekt rechnet, aber mehrere Aufgaben gleichzeitig uebernimmt. In der Praxis ist das ein klassischer Ausgangspunkt fuer Refactoring.",{"type":1080,"tag":1088,"props":2321,"children":2322},{},[2323],{"type":1086,"value":2324},"Unterscheide zwei Qualitaetsstufen:",{"type":1080,"tag":1131,"props":2326,"children":2327},{},[2328,2338],{"type":1080,"tag":1110,"props":2329,"children":2330},{},[2331,2336],{"type":1080,"tag":1836,"props":2332,"children":2333},{},[2334],{"type":1086,"value":2335},"funktional korrekt",{"type":1086,"value":2337},"\nErgebnis stimmt fuer Testeingaben.",{"type":1080,"tag":1110,"props":2339,"children":2340},{},[2341,2346],{"type":1080,"tag":1836,"props":2342,"children":2343},{},[2344],{"type":1086,"value":2345},"strukturell wartbar",{"type":1086,"value":2347},"\nCode ist lesbar, testbar und erweiterbar.",{"type":1080,"tag":1088,"props":2349,"children":2350},{},[2351],{"type":1086,"value":2352},"Das Kapitel trainiert den Schritt von 1 zu 2.",{"type":1080,"tag":1094,"props":2354,"children":2356},{"id":2355},"verantwortungen-explizit-trennen",[2357],{"type":1086,"value":2358},"Verantwortungen explizit trennen",{"type":1080,"tag":1088,"props":2360,"children":2361},{},[2362],{"type":1086,"value":2363},"Im Statistikbeispiel lassen sich mindestens vier Verantwortungen erkennen:",{"type":1080,"tag":1131,"props":2365,"children":2366},{},[2367,2372,2377,2382],{"type":1080,"tag":1110,"props":2368,"children":2369},{},[2370],{"type":1086,"value":2371},"Eingabegueltigkeit pruefen",{"type":1080,"tag":1110,"props":2373,"children":2374},{},[2375],{"type":1086,"value":2376},"Kennzahlen berechnen",{"type":1080,"tag":1110,"props":2378,"children":2379},{},[2380],{"type":1086,"value":2381},"Ergebnis formatieren",{"type":1080,"tag":1110,"props":2383,"children":2384},{},[2385],{"type":1086,"value":2137},{"type":1080,"tag":1088,"props":2387,"children":2388},{},[2389],{"type":1086,"value":2390},"Wenn diese Teile in einer Methode vermischt bleiben, werden Aenderungen teuer.",{"type":1080,"tag":1094,"props":2392,"children":2394},{"id":2393},"schrittweises-refactoring-ohne-verhaltensaenderung",[2395],{"type":1086,"value":2396},"Schrittweises Refactoring ohne Verhaltensaenderung",{"type":1080,"tag":1088,"props":2398,"children":2399},{},[2400],{"type":1086,"value":2401},"Wichtig: Refactoring soll das Verhalten nicht aendern.",{"type":1080,"tag":1088,"props":2403,"children":2404},{},[2405],{"type":1086,"value":2406},"Empfohlene Reihenfolge:",{"type":1080,"tag":1131,"props":2408,"children":2409},{},[2410,2415,2420,2425,2430],{"type":1080,"tag":1110,"props":2411,"children":2412},{},[2413],{"type":1086,"value":2414},"Ausgangscode mit kleinen Testdaten fixieren.",{"type":1080,"tag":1110,"props":2416,"children":2417},{},[2418],{"type":1086,"value":2419},"Erste Teilmethode extrahieren (z. B. Summe).",{"type":1080,"tag":1110,"props":2421,"children":2422},{},[2423],{"type":1086,"value":2424},"Nach jedem Schritt erneut testen.",{"type":1080,"tag":1110,"props":2426,"children":2427},{},[2428],{"type":1086,"value":2429},"Naechste Teilmethode extrahieren.",{"type":1080,"tag":1110,"props":2431,"children":2432},{},[2433],{"type":1086,"value":2434},"Zum Schluss Namen und Parameter klarziehen.",{"type":1080,"tag":1088,"props":2436,"children":2437},{},[2438],{"type":1086,"value":2439},"So bleibt die Fehlerwahrscheinlichkeit niedrig.",{"type":1080,"tag":1094,"props":2441,"children":2443},{"id":2442},"parameterdesign-bei-hilfsmethoden",[2444],{"type":1086,"value":2445},"Parameterdesign bei Hilfsmethoden",{"type":1080,"tag":1088,"props":2447,"children":2448},{},[2449,2451,2457],{"type":1086,"value":2450},"Im Arbeitsblatt ist ",{"type":1080,"tag":1166,"props":2452,"children":2454},{"className":2453},[],[2455],{"type":1086,"value":2456},"berechneDurchschnitt(int[] zahlen, int summe)",{"type":1086,"value":2458}," vorgesehen. Das zeigt ein gutes Prinzip:",{"type":1080,"tag":1106,"props":2460,"children":2461},{},[2462,2467],{"type":1080,"tag":1110,"props":2463,"children":2464},{},[2465],{"type":1086,"value":2466},"bereits berechnete Werte als Parameter weitergeben",{"type":1080,"tag":1110,"props":2468,"children":2469},{},[2470],{"type":1086,"value":2471},"doppelte Arbeit vermeiden",{"type":1080,"tag":1088,"props":2473,"children":2474},{},[2475],{"type":1086,"value":2476},"Dadurch bleibt Komplexitaet in jeder Methode klein.",{"type":1080,"tag":1094,"props":2478,"children":2480},{"id":2479},"rueckgabestrategien-vergleichen",[2481],{"type":1086,"value":2482},"Rueckgabestrategien vergleichen",{"type":1080,"tag":1088,"props":2484,"children":2485},{},[2486,2488,2494],{"type":1086,"value":2487},"Bei ",{"type":1080,"tag":1166,"props":2489,"children":2491},{"className":2490},[],[2492],{"type":1086,"value":2493},"berechneMinUndMax",{"type":1086,"value":2495}," gibt es verschiedene Loesungen:",{"type":1080,"tag":1131,"props":2497,"children":2498},{},[2499,2510,2521],{"type":1080,"tag":1110,"props":2500,"children":2501},{},[2502,2504],{"type":1086,"value":2503},"Rueckgabe als ",{"type":1080,"tag":1166,"props":2505,"children":2507},{"className":2506},[],[2508],{"type":1086,"value":2509},"int[] {min, max}",{"type":1080,"tag":1110,"props":2511,"children":2512},{},[2513,2515],{"type":1086,"value":2514},"kleines Hilfsobjekt ",{"type":1080,"tag":1166,"props":2516,"children":2518},{"className":2517},[],[2519],{"type":1086,"value":2520},"MinMax",{"type":1080,"tag":1110,"props":2522,"children":2523},{},[2524],{"type":1086,"value":2525},"zwei getrennte Methoden",{"type":1080,"tag":1088,"props":2527,"children":2528},{},[2529,2531,2537],{"type":1086,"value":2530},"Fuer den Einstieg ist ",{"type":1080,"tag":1166,"props":2532,"children":2534},{"className":2533},[],[2535],{"type":1086,"value":2536},"int[]",{"type":1086,"value":2538}," oft ausreichend. Fuer groessere Systeme ist ein benanntes Objekt lesbarer.",{"type":1080,"tag":1094,"props":2540,"children":2542},{"id":2541},"ausgabe-von-berechnung-trennen",[2543],{"type":1086,"value":2544},"Ausgabe von Berechnung trennen",{"type":1080,"tag":1088,"props":2546,"children":2547},{},[2548],{"type":1086,"value":2549},"Eine zentrale Lehre des Blatts: Rechenmethoden sollten moeglichst nicht direkt drucken.",{"type":1080,"tag":1088,"props":2551,"children":2552},{},[2553],{"type":1086,"value":2554},"Besser:",{"type":1080,"tag":1106,"props":2556,"children":2557},{},[2558,2563],{"type":1080,"tag":1110,"props":2559,"children":2560},{},[2561],{"type":1086,"value":2562},"Berechnung liefert Werte",{"type":1080,"tag":1110,"props":2564,"children":2565},{},[2566],{"type":1086,"value":2567},"Ausgabe passiert in eigener Methode",{"type":1080,"tag":1088,"props":2569,"children":2570},{},[2571],{"type":1086,"value":2572},"Vorteile:",{"type":1080,"tag":1106,"props":2574,"children":2575},{},[2576,2581],{"type":1080,"tag":1110,"props":2577,"children":2578},{},[2579],{"type":1086,"value":2580},"einfache Tests ohne Konsolenabhaengigkeit",{"type":1080,"tag":1110,"props":2582,"children":2583},{},[2584],{"type":1086,"value":2585},"spaeter leicht auf GUI oder Datei umstellbar",{"type":1080,"tag":1094,"props":2587,"children":2589},{"id":2588},"beispiel-mit-hilfsobjekt",[2590],{"type":1086,"value":2591},"Beispiel mit Hilfsobjekt",{"type":1080,"tag":1294,"props":2593,"children":2595},{"className":1296,"code":2594,"language":1298,"meta":62,"style":62},"class Statistik {\n    int summe;\n    double durchschnitt;\n    int minimum;\n    int maximum;\n}\n\nprivate Statistik berechneStatistik(int[] zahlen) {\n    Statistik s = new Statistik();\n    s.summe = berechneSumme(zahlen);\n    s.durchschnitt = berechneDurchschnitt(zahlen, s.summe);\n    int[] mm = berechneMinUndMax(zahlen);\n    s.minimum = mm[0];\n    s.maximum = mm[1];\n    return s;\n}\n",[2596],{"type":1080,"tag":1166,"props":2597,"children":2598},{"__ignoreMap":62},[2599,2617,2628,2640,2652,2664,2671,2678,2707,2733,2753,2774,2798,2824,2849,2862],{"type":1080,"tag":1304,"props":2600,"children":2601},{"class":1306,"line":14},[2602,2607,2612],{"type":1080,"tag":1304,"props":2603,"children":2604},{"style":1310},[2605],{"type":1086,"value":2606},"class",{"type":1080,"tag":1304,"props":2608,"children":2609},{"style":1365},[2610],{"type":1086,"value":2611}," Statistik",{"type":1080,"tag":1304,"props":2613,"children":2614},{"style":1316},[2615],{"type":1086,"value":2616}," {\n",{"type":1080,"tag":1304,"props":2618,"children":2619},{"class":1306,"line":33},[2620,2624],{"type":1080,"tag":1304,"props":2621,"children":2622},{"style":1310},[2623],{"type":1086,"value":1468},{"type":1080,"tag":1304,"props":2625,"children":2626},{"style":1316},[2627],{"type":1086,"value":1556},{"type":1080,"tag":1304,"props":2629,"children":2630},{"class":1306,"line":59},[2631,2635],{"type":1080,"tag":1304,"props":2632,"children":2633},{"style":1310},[2634],{"type":1086,"value":1734},{"type":1080,"tag":1304,"props":2636,"children":2637},{"style":1316},[2638],{"type":1086,"value":2639}," durchschnitt;\n",{"type":1080,"tag":1304,"props":2641,"children":2642},{"class":1306,"line":74},[2643,2647],{"type":1080,"tag":1304,"props":2644,"children":2645},{"style":1310},[2646],{"type":1086,"value":1468},{"type":1080,"tag":1304,"props":2648,"children":2649},{"style":1316},[2650],{"type":1086,"value":2651}," minimum;\n",{"type":1080,"tag":1304,"props":2653,"children":2654},{"class":1306,"line":135},[2655,2659],{"type":1080,"tag":1304,"props":2656,"children":2657},{"style":1310},[2658],{"type":1086,"value":1468},{"type":1080,"tag":1304,"props":2660,"children":2661},{"style":1316},[2662],{"type":1086,"value":2663}," maximum;\n",{"type":1080,"tag":1304,"props":2665,"children":2666},{"class":1306,"line":160},[2667],{"type":1080,"tag":1304,"props":2668,"children":2669},{"style":1316},[2670],{"type":1086,"value":1405},{"type":1080,"tag":1304,"props":2672,"children":2673},{"class":1306,"line":173},[2674],{"type":1080,"tag":1304,"props":2675,"children":2676},{"emptyLinePlaceholder":1074},[2677],{"type":1086,"value":1702},{"type":1080,"tag":1304,"props":2679,"children":2680},{"class":1306,"line":186},[2681,2685,2690,2695,2699,2703],{"type":1080,"tag":1304,"props":2682,"children":2683},{"style":1310},[2684],{"type":1086,"value":1436},{"type":1080,"tag":1304,"props":2686,"children":2687},{"style":1316},[2688],{"type":1086,"value":2689}," Statistik ",{"type":1080,"tag":1304,"props":2691,"children":2692},{"style":1365},[2693],{"type":1086,"value":2694},"berechneStatistik",{"type":1080,"tag":1304,"props":2696,"children":2697},{"style":1316},[2698],{"type":1086,"value":1373},{"type":1080,"tag":1304,"props":2700,"children":2701},{"style":1310},[2702],{"type":1086,"value":1455},{"type":1080,"tag":1304,"props":2704,"children":2705},{"style":1316},[2706],{"type":1086,"value":1460},{"type":1080,"tag":1304,"props":2708,"children":2709},{"class":1306,"line":1756},[2710,2715,2719,2724,2728],{"type":1080,"tag":1304,"props":2711,"children":2712},{"style":1316},[2713],{"type":1086,"value":2714},"    Statistik s ",{"type":1080,"tag":1304,"props":2716,"children":2717},{"style":1310},[2718],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":2720,"children":2721},{"style":1310},[2722],{"type":1086,"value":2723}," new",{"type":1080,"tag":1304,"props":2725,"children":2726},{"style":1365},[2727],{"type":1086,"value":2611},{"type":1080,"tag":1304,"props":2729,"children":2730},{"style":1316},[2731],{"type":1086,"value":2732},"();\n",{"type":1080,"tag":1304,"props":2734,"children":2735},{"class":1306,"line":1013},[2736,2741,2745,2749],{"type":1080,"tag":1304,"props":2737,"children":2738},{"style":1316},[2739],{"type":1086,"value":2740},"    s.summe ",{"type":1080,"tag":1304,"props":2742,"children":2743},{"style":1310},[2744],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":2746,"children":2747},{"style":1365},[2748],{"type":1086,"value":1446},{"type":1080,"tag":1304,"props":2750,"children":2751},{"style":1316},[2752],{"type":1086,"value":1726},{"type":1080,"tag":1304,"props":2754,"children":2755},{"class":1306,"line":1024},[2756,2761,2765,2769],{"type":1080,"tag":1304,"props":2757,"children":2758},{"style":1316},[2759],{"type":1086,"value":2760},"    s.durchschnitt ",{"type":1080,"tag":1304,"props":2762,"children":2763},{"style":1310},[2764],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":2766,"children":2767},{"style":1365},[2768],{"type":1086,"value":1748},{"type":1080,"tag":1304,"props":2770,"children":2771},{"style":1316},[2772],{"type":1086,"value":2773},"(zahlen, s.summe);\n",{"type":1080,"tag":1304,"props":2775,"children":2776},{"class":1306,"line":1035},[2777,2781,2786,2790,2794],{"type":1080,"tag":1304,"props":2778,"children":2779},{"style":1310},[2780],{"type":1086,"value":1468},{"type":1080,"tag":1304,"props":2782,"children":2783},{"style":1316},[2784],{"type":1086,"value":2785},"[] mm ",{"type":1080,"tag":1304,"props":2787,"children":2788},{"style":1310},[2789],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":2791,"children":2792},{"style":1365},[2793],{"type":1086,"value":1775},{"type":1080,"tag":1304,"props":2795,"children":2796},{"style":1316},[2797],{"type":1086,"value":1726},{"type":1080,"tag":1304,"props":2799,"children":2800},{"class":1306,"line":1046},[2801,2806,2810,2815,2819],{"type":1080,"tag":1304,"props":2802,"children":2803},{"style":1316},[2804],{"type":1086,"value":2805},"    s.minimum ",{"type":1080,"tag":1304,"props":2807,"children":2808},{"style":1310},[2809],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":2811,"children":2812},{"style":1316},[2813],{"type":1086,"value":2814}," mm[",{"type":1080,"tag":1304,"props":2816,"children":2817},{"style":1327},[2818],{"type":1086,"value":1797},{"type":1080,"tag":1304,"props":2820,"children":2821},{"style":1316},[2822],{"type":1086,"value":2823},"];\n",{"type":1080,"tag":1304,"props":2825,"children":2827},{"class":1306,"line":2826},14,[2828,2833,2837,2841,2845],{"type":1080,"tag":1304,"props":2829,"children":2830},{"style":1316},[2831],{"type":1086,"value":2832},"    s.maximum ",{"type":1080,"tag":1304,"props":2834,"children":2835},{"style":1310},[2836],{"type":1086,"value":1478},{"type":1080,"tag":1304,"props":2838,"children":2839},{"style":1316},[2840],{"type":1086,"value":2814},{"type":1080,"tag":1304,"props":2842,"children":2843},{"style":1327},[2844],{"type":1086,"value":1058},{"type":1080,"tag":1304,"props":2846,"children":2847},{"style":1316},[2848],{"type":1086,"value":2823},{"type":1080,"tag":1304,"props":2850,"children":2852},{"class":1306,"line":2851},15,[2853,2857],{"type":1080,"tag":1304,"props":2854,"children":2855},{"style":1310},[2856],{"type":1086,"value":1392},{"type":1080,"tag":1304,"props":2858,"children":2859},{"style":1316},[2860],{"type":1086,"value":2861}," s;\n",{"type":1080,"tag":1304,"props":2863,"children":2865},{"class":1306,"line":2864},16,[2866],{"type":1080,"tag":1304,"props":2867,"children":2868},{"style":1316},[2869],{"type":1086,"value":1405},{"type":1080,"tag":1088,"props":2871,"children":2872},{},[2873],{"type":1086,"value":2874},"Dies ist kein Pflichtmuster im Blatt, aber eine sinnvolle Vertiefung fuer saubere Struktur.",{"type":1080,"tag":1094,"props":2876,"children":2878},{"id":2877},"heuristik-fuer-methodengroesse",[2879],{"type":1086,"value":2880},"Heuristik fuer Methodengroesse",{"type":1080,"tag":1088,"props":2882,"children":2883},{},[2884],{"type":1086,"value":2885},"Praktische Faustregel fuer Unterrichtsprojekte:",{"type":1080,"tag":1106,"props":2887,"children":2888},{},[2889,2894],{"type":1080,"tag":1110,"props":2890,"children":2891},{},[2892],{"type":1086,"value":2893},"Wenn eine Methode beim Vorlesen mehr als einen klaren Gedankengang enthaelt, sollte sie geteilt werden.",{"type":1080,"tag":1110,"props":2895,"children":2896},{},[2897,2899,2904],{"type":1086,"value":2898},"Wenn mehrere ",{"type":1080,"tag":1166,"props":2900,"children":2902},{"className":2901},[],[2903],{"type":1086,"value":1313},{"type":1086,"value":2905},"-Bloecke verschiedene Aufgaben steuern, sollte umstrukturiert werden.",{"type":1080,"tag":1088,"props":2907,"children":2908},{},[2909],{"type":1086,"value":2910},"Ziel ist nicht kuenstliche Kleinteiligkeit, sondern klare Verantwortlichkeit.",{"type":1080,"tag":1094,"props":2912,"children":2914},{"id":2913},"typische-refactoring-fallen",[2915],{"type":1086,"value":2916},"Typische Refactoring-Fallen",{"type":1080,"tag":1131,"props":2918,"children":2919},{},[2920,2925,2930,2935,2940],{"type":1080,"tag":1110,"props":2921,"children":2922},{},[2923],{"type":1086,"value":2924},"Methode extrahieren, aber Namen unklar lassen.",{"type":1080,"tag":1110,"props":2926,"children":2927},{},[2928],{"type":1086,"value":2929},"Seiteneffekte beim Umzug uebersehen.",{"type":1080,"tag":1110,"props":2931,"children":2932},{},[2933],{"type":1086,"value":2934},"Zu viele Parameter ohne Struktur.",{"type":1080,"tag":1110,"props":2936,"children":2937},{},[2938],{"type":1086,"value":2939},"Eingabepruefung versehentlich entfernen.",{"type":1080,"tag":1110,"props":2941,"children":2942},{},[2943],{"type":1086,"value":2944},"Tests erst nach vielen Schritten ausfuehren.",{"type":1080,"tag":1088,"props":2946,"children":2947},{},[2948],{"type":1086,"value":2949},"Das Blatt eignet sich gut, um genau diese Fallen bewusst zu besprechen.",{"type":1080,"tag":1094,"props":2951,"children":2953},{"id":2952},"uebung-zweites-szenario-strukturieren",[2954],{"type":1086,"value":2955},"Uebung: zweites Szenario strukturieren",{"type":1080,"tag":1088,"props":2957,"children":2958},{},[2959],{"type":1086,"value":2960},"Das Arbeitsblatt nennt als weiteres Beispiel eine Kundenauswertung. Eine moegliche Struktur:",{"type":1080,"tag":1131,"props":2962,"children":2963},{},[2964,2973,2982,2991],{"type":1080,"tag":1110,"props":2965,"children":2966},{},[2967],{"type":1080,"tag":1166,"props":2968,"children":2970},{"className":2969},[],[2971],{"type":1086,"value":2972},"zaehleGruppen(...)",{"type":1080,"tag":1110,"props":2974,"children":2975},{},[2976],{"type":1080,"tag":1166,"props":2977,"children":2979},{"className":2978},[],[2980],{"type":1086,"value":2981},"fuelleGruppenArrays(...)",{"type":1080,"tag":1110,"props":2983,"children":2984},{},[2985],{"type":1080,"tag":1166,"props":2986,"children":2988},{"className":2987},[],[2989],{"type":1086,"value":2990},"berechneDurchschnittsalter(...)",{"type":1080,"tag":1110,"props":2992,"children":2993},{},[2994],{"type":1080,"tag":1166,"props":2995,"children":2997},{"className":2996},[],[2998],{"type":1086,"value":2999},"druckeErgebnis(...)",{"type":1080,"tag":1088,"props":3001,"children":3002},{},[3003],{"type":1086,"value":3004},"Diese Uebertragung zeigt, dass Strukturierungsprinzipien nicht auf Statistikzahlen beschraenkt sind.",{"type":1080,"tag":1094,"props":3006,"children":3008},{"id":3007},"code-review-checkliste",[3009],{"type":1086,"value":3010},"Code-Review-Checkliste",{"type":1080,"tag":1131,"props":3012,"children":3013},{},[3014,3019,3024,3029,3034],{"type":1080,"tag":1110,"props":3015,"children":3016},{},[3017],{"type":1086,"value":3018},"Hat jede Methode genau eine Hauptaufgabe?",{"type":1080,"tag":1110,"props":3020,"children":3021},{},[3022],{"type":1086,"value":3023},"Sind Methodennamen selbsterklaerend?",{"type":1080,"tag":1110,"props":3025,"children":3026},{},[3027],{"type":1086,"value":3028},"Werden Randfaelle frueh behandelt?",{"type":1080,"tag":1110,"props":3030,"children":3031},{},[3032],{"type":1086,"value":3033},"Sind Berechnung und Ausgabe getrennt?",{"type":1080,"tag":1110,"props":3035,"children":3036},{},[3037],{"type":1086,"value":3038},"Gibt es Duplikatcode, der extrahiert werden sollte?",{"type":1080,"tag":1088,"props":3040,"children":3041},{},[3042],{"type":1086,"value":3043},"Diese Fragen koennen direkt in Partnerreviews genutzt werden.",{"type":1080,"tag":1094,"props":3045,"children":3047},{"id":3046},"leistungsnachweis-idee",[3048],{"type":1086,"value":3049},"Leistungsnachweis-Idee",{"type":1080,"tag":1088,"props":3051,"children":3052},{},[3053],{"type":1086,"value":3054},"Aufgabe:",{"type":1080,"tag":1106,"props":3056,"children":3057},{},[3058,3063,3068],{"type":1080,"tag":1110,"props":3059,"children":3060},{},[3061],{"type":1086,"value":3062},"Gegeben ist eine 40-zeilige Methode mit gemischter Logik.",{"type":1080,"tag":1110,"props":3064,"children":3065},{},[3066],{"type":1086,"value":3067},"Ziel ist Refactoring in 4 bis 6 Hilfsmethoden.",{"type":1080,"tag":1110,"props":3069,"children":3070},{},[3071,3073],{"type":1086,"value":3072},"Bewertungskriterien:\n",{"type":1080,"tag":1106,"props":3074,"children":3075},{},[3076,3081,3086,3091],{"type":1080,"tag":1110,"props":3077,"children":3078},{},[3079],{"type":1086,"value":3080},"funktional unveraendert",{"type":1080,"tag":1110,"props":3082,"children":3083},{},[3084],{"type":1086,"value":3085},"bessere Lesbarkeit",{"type":1080,"tag":1110,"props":3087,"children":3088},{},[3089],{"type":1086,"value":3090},"nachvollziehbare Methodennamen",{"type":1080,"tag":1110,"props":3092,"children":3093},{},[3094],{"type":1086,"value":3095},"Testfaelle fuer Randbedingungen",{"type":1080,"tag":1088,"props":3097,"children":3098},{},[3099],{"type":1086,"value":3100},"Damit wird exakt die Kompetenz geprueft, die das Blatt aufbaut.",{"type":1080,"tag":1094,"props":3102,"children":3104},{"id":3103},"transfer-in-projektarbeit",[3105],{"type":1086,"value":3106},"Transfer in Projektarbeit",{"type":1080,"tag":1088,"props":3108,"children":3109},{},[3110],{"type":1086,"value":3111},"In groesseren Projekten ist \"Strukturieren mit Methoden\" der Standardalltag:",{"type":1080,"tag":1106,"props":3113,"children":3114},{},[3115,3120,3125],{"type":1080,"tag":1110,"props":3116,"children":3117},{},[3118],{"type":1086,"value":3119},"Features werden erweitert",{"type":1080,"tag":1110,"props":3121,"children":3122},{},[3123],{"type":1086,"value":3124},"alte Methoden werden unlesbar",{"type":1080,"tag":1110,"props":3126,"children":3127},{},[3128],{"type":1086,"value":3129},"Refactoring sorgt fuer langfristige Wartbarkeit",{"type":1080,"tag":1088,"props":3131,"children":3132},{},[3133],{"type":1086,"value":3134},"Wer diese Technik frueh lernt, spart spaeter viel Zeit bei Fehlersuche und Teamarbeit.",{"type":1080,"tag":1094,"props":3136,"children":3138},{"id":3137},"abschluss-der-vertiefung",[3139],{"type":1086,"value":3140},"Abschluss der Vertiefung",{"type":1080,"tag":1088,"props":3142,"children":3143},{},[3144],{"type":1086,"value":3145},"Das Arbeitsblatt hat einen klaren Mehrwert: Es zeigt nicht nur, wie man Java-Code schreibt, sondern wie man vorhandenen Code verbessert, ohne Funktionalitaet zu verlieren. Diese Refactoring-Kompetenz ist ein Schluesselschritt von Einsteiger- zu professioneller Entwicklungsarbeit.",{"type":1080,"tag":1094,"props":3147,"children":3149},{"id":3148},"abschlussaufgabe-zum-refactoring",[3150],{"type":1086,"value":3151},"Abschlussaufgabe zum Refactoring",{"type":1080,"tag":1088,"props":3153,"children":3154},{},[3155],{"type":1086,"value":3156},"Gegeben ist eine absichtlich lange Methode zur Analyse von Verkaufsdaten. Refaktoriere sie in mindestens fuenf Hilfsmethoden mit klaren Namen.",{"type":1080,"tag":1088,"props":3158,"children":3159},{},[3160],{"type":1086,"value":3161},"Mindestanforderungen:",{"type":1080,"tag":1131,"props":3163,"children":3164},{},[3165,3170,3175,3180,3185],{"type":1080,"tag":1110,"props":3166,"children":3167},{},[3168],{"type":1086,"value":3169},"Eingabevalidierung separat",{"type":1080,"tag":1110,"props":3171,"children":3172},{},[3173],{"type":1086,"value":3174},"Berechnungsteil getrennt",{"type":1080,"tag":1110,"props":3176,"children":3177},{},[3178],{"type":1086,"value":3179},"Ausgabe getrennt",{"type":1080,"tag":1110,"props":3181,"children":3182},{},[3183],{"type":1086,"value":3184},"keine Duplikate",{"type":1080,"tag":1110,"props":3186,"children":3187},{},[3188],{"type":1086,"value":3189},"Verhalten gegenueber Ausgangscode unveraendert",{"type":1080,"tag":1088,"props":3191,"children":3192},{},[3193],{"type":1086,"value":3194},"Dokumentiere vor und nach dem Refactoring:",{"type":1080,"tag":1106,"props":3196,"children":3197},{},[3198,3203,3208],{"type":1080,"tag":1110,"props":3199,"children":3200},{},[3201],{"type":1086,"value":3202},"Methodenlaenge",{"type":1080,"tag":1110,"props":3204,"children":3205},{},[3206],{"type":1086,"value":3207},"Anzahl Bedingungen",{"type":1080,"tag":1110,"props":3209,"children":3210},{},[3211],{"type":1086,"value":3212},"Anzahl frueher Rueckgaben",{"type":1080,"tag":1088,"props":3214,"children":3215},{},[3216],{"type":1086,"value":3217},"Damit wird die im Arbeitsblatt trainierte Strukturierung messbar gemacht.",{"type":1080,"tag":1094,"props":3219,"children":3221},{"id":3220},"pruefungsnahe-kurzfragen",[3222],{"type":1086,"value":3223},"Pruefungsnahe Kurzfragen",{"type":1080,"tag":1131,"props":3225,"children":3226},{},[3227,3232,3244,3249],{"type":1080,"tag":1110,"props":3228,"children":3229},{},[3230],{"type":1086,"value":3231},"Woran erkennst du, dass eine Methode zu viele Verantwortungen hat?",{"type":1080,"tag":1110,"props":3233,"children":3234},{},[3235,3237,3242],{"type":1086,"value":3236},"Warum sollten Hilfsmethoden meist ",{"type":1080,"tag":1166,"props":3238,"children":3240},{"className":3239},[],[3241],{"type":1086,"value":1436},{"type":1086,"value":3243}," sein?",{"type":1080,"tag":1110,"props":3245,"children":3246},{},[3247],{"type":1086,"value":3248},"Weshalb ist die Trennung von Berechnung und Ausgabe wichtig?",{"type":1080,"tag":1110,"props":3250,"children":3251},{},[3252],{"type":1086,"value":3253},"Wie stellst du sicher, dass Refactoring das Verhalten nicht veraendert?",{"type":1080,"tag":1088,"props":3255,"children":3256},{},[3257],{"type":1086,"value":3258},"Mit diesen Fragen laesst sich die Refactoring-Kompetenz schnell ueberpruefen.",{"type":1080,"tag":1094,"props":3260,"children":3262},{"id":3261},"weiterfuehrende-praxisaufgabe",[3263],{"type":1086,"value":3264},"Weiterfuehrende Praxisaufgabe",{"type":1080,"tag":1088,"props":3266,"children":3267},{},[3268],{"type":1086,"value":3269},"Nimm eine bestehende Methode aus deinem eigenen Projekt mit mindestens 25 Zeilen und refaktoriere sie nach diesem Schema:",{"type":1080,"tag":1131,"props":3271,"children":3272},{},[3273,3278,3283,3288],{"type":1080,"tag":1110,"props":3274,"children":3275},{},[3276],{"type":1086,"value":3277},"Gueltigkeitspruefung isolieren",{"type":1080,"tag":1110,"props":3279,"children":3280},{},[3281],{"type":1086,"value":3282},"Hauptberechnung in Teilmethoden zerlegen",{"type":1080,"tag":1110,"props":3284,"children":3285},{},[3286],{"type":1086,"value":3287},"Ausgabe/Logging trennen",{"type":1080,"tag":1110,"props":3289,"children":3290},{},[3291],{"type":1086,"value":3292},"gemeinsame Teillogik zentralisieren",{"type":1080,"tag":1088,"props":3294,"children":3295},{},[3296],{"type":1086,"value":3297},"Dokumentiere danach kurz:",{"type":1080,"tag":1106,"props":3299,"children":3300},{},[3301,3306,3311],{"type":1080,"tag":1110,"props":3302,"children":3303},{},[3304],{"type":1086,"value":3305},"vorherige Zeilenanzahl",{"type":1080,"tag":1110,"props":3307,"children":3308},{},[3309],{"type":1086,"value":3310},"neue Methodenzahl",{"type":1080,"tag":1110,"props":3312,"children":3313},{},[3314],{"type":1086,"value":3315},"welche Methoden jetzt leichter testbar sind",{"type":1080,"tag":1088,"props":3317,"children":3318},{},[3319],{"type":1086,"value":3320},"So wird die Kapitelidee direkt auf echten Code uebertragen.",{"type":1080,"tag":1094,"props":3322,"children":3324},{"id":3323},"mini-reflexion",[3325],{"type":1086,"value":3326},"Mini-Reflexion",{"type":1080,"tag":1088,"props":3328,"children":3329},{},[3330],{"type":1086,"value":3331},"Gute Strukturierung ist dann erreicht, wenn die Hauptmethode wie ein Ablaufplan gelesen werden kann und jede Hilfsmethode nur einen klaren Zweck erfuellt. Wenn das beim lauten Vorlesen nicht erkennbar ist, lohnt sich ein weiterer Refactoring-Schritt.",{"type":1080,"tag":1094,"props":3333,"children":3335},{"id":3334},"zusatzaufgabe",[3336],{"type":1086,"value":3337},"Zusatzaufgabe",{"type":1080,"tag":1088,"props":3339,"children":3340},{},[3341],{"type":1086,"value":3342},"Nimm eine vorhandene Methode aus diesem Kapitel und fuehre eine zweite Refactoringrunde nur auf Benennungsebene durch: Variablen-, Methoden- und Parameternamen sollen ohne zusaetzliche Kommentare selbsterklaerend sein. Vergleiche danach beide Versionen im direkten Code-Review.",{"type":1080,"tag":1094,"props":3344,"children":3346},{"id":3345},"schlussgedanke",[3347],{"type":1086,"value":3348},"Schlussgedanke",{"type":1080,"tag":1088,"props":3350,"children":3351},{},[3352],{"type":1086,"value":3353},"Strukturierung ist kein einmaliger Schritt, sondern ein kontinuierlicher Prozess. Jede neue Anforderung ist ein Anlass zu pruefen, ob die Methodenstruktur noch klar und tragfaehig ist.",{"type":1080,"tag":1088,"props":3355,"children":3356},{},[3357],{"type":1086,"value":3358},"Refactoring ist damit nicht nur technische Kosmetik, sondern direkte Qualitaetsarbeit an Lesbarkeit, Testbarkeit und langfristiger Veraenderbarkeit des Codes.",{"type":1080,"tag":3360,"props":3361,"children":3362},"style",{},[3363],{"type":1086,"value":3364},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":62,"searchDepth":33,"depth":33,"links":3366},[3367,3368,3369,3370,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,3388,3389,3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404],{"id":1096,"depth":33,"text":1099},{"id":1156,"depth":33,"text":1159},{"id":1222,"depth":33,"text":1225},{"id":1277,"depth":33,"text":1280,"children":3371},[3372,3373,3374],{"id":1284,"depth":59,"text":1287},{"id":1413,"depth":59,"text":1416},{"id":1566,"depth":59,"text":1569},{"id":1826,"depth":33,"text":1829},{"id":1920,"depth":33,"text":1923},{"id":1961,"depth":33,"text":1964},{"id":2012,"depth":33,"text":2015},{"id":2060,"depth":33,"text":2063},{"id":2101,"depth":33,"text":2104},{"id":2145,"depth":33,"text":2148},{"id":2204,"depth":33,"text":2207},{"id":2261,"depth":33,"text":2264},{"id":2300,"depth":33,"text":2303},{"id":2311,"depth":33,"text":2314},{"id":2355,"depth":33,"text":2358},{"id":2393,"depth":33,"text":2396},{"id":2442,"depth":33,"text":2445},{"id":2479,"depth":33,"text":2482},{"id":2541,"depth":33,"text":2544},{"id":2588,"depth":33,"text":2591},{"id":2877,"depth":33,"text":2880},{"id":2913,"depth":33,"text":2916},{"id":2952,"depth":33,"text":2955},{"id":3007,"depth":33,"text":3010},{"id":3046,"depth":33,"text":3049},{"id":3103,"depth":33,"text":3106},{"id":3137,"depth":33,"text":3140},{"id":3148,"depth":33,"text":3151},{"id":3220,"depth":33,"text":3223},{"id":3261,"depth":33,"text":3264},{"id":3323,"depth":33,"text":3326},{"id":3334,"depth":33,"text":3337},{"id":3345,"depth":33,"text":3348},"markdown","content:01_Programmierung:02_Java:03_StrukturierenMitMethoden:de.md","01_Programmierung/02_Java/03_StrukturierenMitMethoden/de.md","01_Programmierung/02_Java/03_StrukturierenMitMethoden/de","md",1787079992860]