Java/Glossar und Widget:Autorenbox: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
< Java(Unterschied zwischen Seiten)
(typo)
Markierung: 2017-Quelltext-Bearbeitung
 
KKeine Bearbeitungszusammenfassung
Markierung: 2017-Quelltext-Bearbeitung
 
Zeile 1: Zeile 1:
Diese Seite ist ein Kurz-Glossar für Fachbegriffe zum schnellen Nachschlagen.
<includeonly>
<div class="uk-panel uk-panel-box uk-panel-box-primary zum-hintergrund-links zum-farbe-xx-heller uk-hidden">
<strong>Autoren</strong>
<small class="uk-align-right" data-zum-hook="last-modified">aktualisiert am: </small>
<div class="uk-flex uk-flex-wrap uk-width-1-1" data-zum-hook="userlist">


==Objektorientierte Programmierung (OOP)==
</div>
Objektorientierte Programmierung ist ein Verfahren zur Strukturierung von Computerprogrammen, bei dem zusammengehörige Daten und die darauf arbeitende Programmlogik zu Einheiten zusammengefasst werden, den sogenannten Objekten.<ref>{{wpde|Objektorientierte Programmierung}}</ref>
</div>
<onlyinclude>
<script type="text/javascript">
 
(function () {
===Klasse===
    const paramArtikel = "<!--{$artikel|escape:'javascript'}-->" || null;
Eine '''Klasse''' ist eine Vorschrift zur Konstruktion von Objekten. Eine Klasse ist immer etwas Abstraktes. Eine Klasse kann zum Beispiel nicht angezeigt werden. Dazu müssen erst Objekte der Klasse erzeugt werden.
    const paramKategorie = "<!--{$kategorie|escape:'javascript'}-->" || null;
 
    const paramMitUnterseiten = "<!--{$mit_unterseiten|escape:'javascript'}-->" === "ja";
'''Beispiel'''
    const element = document.currentScript && document.currentScript.previousElementSibling;
 
    if (element) {
Die Klasse „Kreis“ im [[Java/Einstieg_in_die_OOP#Beispielprojekt_.22Shapes.22|Beispiel]] enthält einen Bauplan
        window.RLQ.push(function () {
eines Kreises. Nach diesem können konkrete Kreise angelegt werden.
            mw.loader.enqueue(['mediawiki.api'], function () {
 
                const getCurrentTitle = () => mw.Title.makeTitle(
'''Konvention'''
                    mw.config.get('wgNamespaceNumber'),
Klassennamen sind '''Substantive'''. Sie werden '''groß''' geschrieben z.B. <code>Canvas, Circle, Square, Triangle</code>.
                    mw.config.get('wgTitle')
 
                    ).getPrefixedText()
===Objekt===
                ;
Ein '''Objekt''' ist eine konkrete, aus der Klasse abgeleitete oder erzeugte '''Instanz''', die sich durch einen bestimmten '''Zustand''' auszeichnet. Aus einer Klasse können mehrere Objekte gebildet werden, die sich voneinander unterscheiden können.
                const userlistEl = $(element).find('[data-zum-hook="userlist"]');
 
                const lastModifiedEl = $(element).find('[data-zum-hook="last-modified"]');
'''Beispiel'''
                const api = new mw.Api();
 
                const queries;
BlueJ benennt Objekte selbst. Es wird der Klassenname verwendet und eine Zahl angehängt: <code>circle1, circle2, circle3</code>
                if (paramKategorie) {
 
                  queries = [{
'''Konvention'''
                    action: 'query',
Objektnamen werden '''klein''' geschrieben z.B. <code>circle1, circle2, circle3</code>.
                    prop: ['contributors', 'info'],
 
                    generator: 'categorymembers',
===Methoden===
                    gcmtitle: `Kategorie:${paramKategorie}`,
'''Methoden''' sind Operationen, die entweder den Zustand eines Objektes ändern (verändernde Methoden) oder Informationen über den Zustand eines Objektes zurückliefern (sondierende Methoden).
                    gcmnamespace: 0,
 
                    gcmtype: 'page',
'''Beispiel'''
                    gcmlimit: 'max'
 
                  }];
Durch die Methode <code>farbeAendern()</code> verändert man die Eigenschaft Farbe eines Objektes.
                } else if (paramMitUnterseiten) {
 
                  queries = [{
'''Konvention'''
                    action: 'query',
Methoden sind '''Verben'''. Sie werden '''klein''' geschrieben z.B. <code>farbeAendern()</code>.
                    prop: ['contributors', 'info'],
 
                    generator: 'allpages',
;Vertiefung
                    titles: paramArtikel || getCurrentTitle(),
 
                  },
*wikibooks: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Methoden Kurzeinstieg Java: OOP]
                  {
 
                    action: 'query',
===Konventionen bei der Namensgebung===
                    prop: ['revisions', 'info', 'contributors'],
Für die Wahl der Namen von Klassen, Methoden und Variablen gelten in Java Konventionen:
                    titles: paramArtikel || getCurrentTitle(),
 
                    rvlimit: 150,
*Es wird die sogenannte '''[https://wiki.selfhtml.org/wiki/CamelCase CamelCase]'''-Schreibweise verwendet: Mehrere Wörter werden zusammen geschrieben. Dabei beginnt jedes Wort in der Mitte mit einem Großbuchstaben:<br>vgl. <code>sichtbarMachen()</code>, <code>einGrünerKreis</code>
                    rvprop: ['userid', 'user', 'flags', 'timestamp'],
*Verwenden Sie '''[https://wiki.selfhtml.org/wiki/Sprechender_Variablenname Sprechende Namen]''', damit Ihnen (oder anderen, die Ihren Code später lesen) das Verständnis erleichtert wird. So soll aus dem Namen  möglichst hervorgehen, welche Funktion die Klasse, Methode oder Variable hat.
                  }];
 
                } else {
</onlyinclude>
                  queries = [{
 
                    action: 'query',
===Gleichheit und Identität von Objekten===
                    prop: ['revisions', 'info', 'contributors'],
Objekte sind '''gleich''', wenn sie die gleichen Attributeigenschaften besitzen, wenn also ihr Zustand gleich ist. '''Identisch''' sind sie, wenn es sich dabei um das selbe Objekt handelt.
                    titles: paramArtikel || getCurrentTitle(),
 
                    rvlimit: 150,
==Datentypen==
                    rvprop: ['userid', 'user', 'flags', 'timestamp'],
 
                  }];
*boolean - Wahrheitswert (true / false)
                }
*int - ganze Zahl
                const response = $.Deferred();
*double - Dezimalzahl (genauer: Fließkommazahl)
                function continueQueryOrResolve(result, query, pages, lastContinue) {
*char - ein Zeichen
                    api.get({...query, ...lastContinue})
*String - Zeichenkette (kein primitiver Datentyp)
                        .then((response) => {
 
                            const newPages = Object.values(response.query.pages).reduce((pages, page) => {
;Vertiefung
                                pages[page.pageid] = {...pages[page.pageid], ...page};
 
                                return pages;
*wikibooks: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Primitive_Datentypen Kurzeinstieg Java: Primitive Datentypen]
                            }, pages);
 
                            if (response.continue !== undefined) {
==Kommentar==
                                continueQueryOrResolve(result, query, newPages, response.continue);
 
                            } else if (response.batchcomplete !== undefined) {
// - Kommentarzeile: Ein doppelter Slash definiert die aktuelle Zeile als Kommentar. Kommentare benutzt man, um Quelltexte verständlicher zu machen und zur Fehlersuche (Zeile auskommentieren, um zu sehen, ob der Fehler in dieser Zeile war).
                                result.resolve(newPages);
 
                            }
==Standardausgabe==
                        });
System.out.println (...);   Gibt Text auf der Konsole aus
                }
 
                queries.reduce((result, query) => {
;Beispiele:
                  const newResult = $.Deferred();
<source lang="java">
                  continueQueryOrResolve(newResult, query, {}, null);
    System.out.println ("Hallo Welt"); // Zeichenketten (in Anführungsstrichen)
                 
 
                  return newResult.then((b) => {
    System.out.println (3*7+2*9); // Rechnungen
                    return result.then((a) => ([...a, ...b]));
 
                  });
    System.out.println (zahl); // Variablen, Parameter oder Eigenschaften (ohne Anführungsstriche)
                }, jQuery.Deferred())
    System.out.println ("Die Zahl ist " + zahl); // Kombinationen daraus
                .then((data) => { response.resolve(data);});
</source>
                continueQueryOrResolve(response, query, {}, null);
 
                response
==if ... else...==
                    .then((pages) => Object.values(pages))
 
                    .then((pages) => {
*Wenn die Bedingung zutrifft, dann führe Anweisungsblock 1 aus, ansonsten (else) führe Anweisungsblock 2 aus.
                        const userCounts = pages.reduce((acc, pageData) => {
*Eine der beiden Möglichkeiten wird ausgeführt
                            acc.touched = Math.max(acc.touched || -1, Date.parse(pageData.touched));
*Die geschweiften Klammern zeigen, was noch zum if und was zum else gehört.
                            acc.userChanges = (pageData.contributors || [])
*In Bedingung können folgende Operatoren verwendet werden:
                                .reduce((userChanges, c) => {
<pre>
                                    userChanges[c.userid] = userChanges[c.userid] || {
      < (kleiner)
                                        count: 0,
      > (größer)
                                        last: -1,
      <= (kleiner gleich)
                                        userid: c.userid,
      >= (größer gleich)
                                        username: c.name
      == (gleich mit zwei == Zeichen)
                                    };
      != (ungleich)
                                    userChanges[c.userid].count += 1;
</pre>
                                    return userChanges;
 
                                }, acc.userChanges || {});
;Link und Vertiefung
                            acc.userChanges = (pageData.revisions || [])
 
                                .reduce((userChanges, r) => {
*http://de.wikibooks.org/wiki/Java_Standard:_Operatoren#Relationale_Operatoren
                                    userChanges[r.userid] = userChanges[r.userid] || {
*http://de.wikibooks.org/wiki/Java_Standard:_Kontrollstrukturen#Verzweigung_.28if.29
                                        count: 0,
 
                                        last: -1,
;Syntax:
                                        userid: r.userid,
<source lang="java">
                                        username: r.user
    if (Bedingung) {
                                    };
 
                                    userChanges[r.userid].count += r.minor !== undefined ? 0.1 : 1;
    ... // Anweisungsblock 1
                                    userChanges[r.userid].last = Math.max(userChanges[r.userid].last, r.revid);
 
                                    return userChanges;
    }
                                }, acc.userChanges || {});
 
                            return acc;
    else {
                        }, {});
 
                        const usernames = Object.values(userCounts.userChanges).sort((a, b) => {
    ... // Anweisungsblock 2
                            let diff = b.count - a.count;
 
                            if (diff !== 0) {
    }
                                return diff;
</source>
                            }
 
                            return b.last - a.last;
;Beispiel:
                        }).map((user) => user.username);
<source lang="java">
                        $(lastModifiedEl).append(new Date(userCounts.touched).toLocaleDateString());
    if (zahl == 0) {
                        const userdatas = usernames.map((user) => api
 
                            .parse(`{{#avatar:${user}|l}}`)
    System.out.println("Die Zahl ist Null");
                            .then((imgTag) => $(imgTag))
 
                            .then((img$) => img$.find('img').addBack('img').attr('src'))
    }
                            .then((imgSrc) => ({user, imgSrc}))
 
                            .fail((ignored) => null)
     else {
                        );
 
                        $.when(...userdatas)
    System.out.println("Die Zahl ist nicht Null");
                            .then((...userdatas) => userdatas.filter((ud) => ud !== null))
    }
                            .then((userdatas) => {
</source>
                                userdatas.forEach(({user, imgSrc}) => {
 
                                    $('<img>')
==Siehe auch==
                                        .attr('src', imgSrc)
 
                                        .wrap('<a>')
*[[Java]]
                                        .parent()
 
                                        .attr('href', mw.Title.makeTitle(mw.config.get('wgNamespaceIds')['benutzer'], user).getUrl())
==Quellen==
                                        .wrap('<div class="uk-border-circle uk-text-center" style="overflow:hidden;width:60%;margin:auto;">')
<references />
                                        .parent()
 
                                        .wrap('<div class="uk-panel uk-panel-border uk-text-small" style="max-width:12ch">')
[[Kategorie:Java]]
                                        .parent()
                                        .append($('<a>').append(user).attr('href', mw.Title.makeTitle(mw.config.get('wgNamespaceIds')['benutzer'], user).getUrl()).wrap('<div class="uk-text-center uk-text-truncate">').parent()).appendTo($(userlistEl));
                                });
                            })
                            .then((ignored) => $(element).removeClass('uk-hidden'));
                    });//end response.then
            });//end loader.enqueue
        });//end RLQ.push
     }//end if
})();
</script>
</includeonly>

Version vom 14. November 2021, 22:32 Uhr