Mal ein paar absolute Anfängerfragen. :)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mal ein paar absolute Anfängerfragen. :)

    Hi.

    Ich programmiere nun schon seit 32 Jahren, allerdings immer nur prozedural. Jetzt habe ich mich entschlossen mich mal in die Android-Entwicklung mit Kotlin einzuarbeiten, aber eine neue Sprache mit einem völlig anderem Ansatz (OOP) auf einem mir programmiertechnisch unbekannten System zu lernen, stellt mich grad vor eine große Herausforderung.

    Ich habe mir zwar schon hunderte Tutorials angeschaut und durchgelesen, aber die Meisten davon zeigen nur was man machen muss um ein bestimmtes Ziel zu erreichen, erklären aber das 'Wieso' nicht und da wird mit so vielen (ebenfalls nicht erklärten) 'Fremdwörtern' umsich geworfen, daß man ziemlich schnell den Faden und die Lust verliert. Die meisten Video-Tutorials sind zudem in einem sehr schlecht verständlichen Indisch-Englisch, das für mich wie Waterboarding für die Ohren ist.

    Deswegen möchte ich hier mal ein paar Fragen stellen, in der Hoffnung, daß mir dann ein Licht aufgeht. ;)

    1.
    Das der objektorientierten Programmierung zugrundeliegende Konzept habe ich soweit verstanden, glaube ich. Aber was ich nicht verstanden habe ist, welchen Vorteil das Ganze gegenüber zum Beispiel normalen Type-Strukturen hat !?

    2.
    Meine bisherige Herangehensweise an ein Programm war immer eine Initialisierung und dann eine Hauptschleife die Benutzereingaben ausgewertet, Funktionen aufgerufen, Grafiken ausgegeben, etc. hat.
    Wie ist denn das bei Android ? Wird der Einstiegspunkt, also die Main-Klasse, auch immer wieder durchlaufen oder nur einmal und die App dann pausiert bis zum Beispiel der User irgendwas macht ?

    3.
    Ich bin eher so der Learning-by-doing-Typ und hab schon einige Sachen (Buttonabfragen, Activitywechsel, etc.) ausprobiert. Jetzt hab ich mir was Neues vorgenommen und komm da grad nicht weiter.

    3.1
    Zum Einen möchte ich eine einfache Tabelle darstellen, in die die Werte der Zellen automatisch eingetragen werden (Ähnlich Excel). Also in der ersten Zeile und in der ersten Spalte sollen Zahlen stehen und in den anderen dann beispielsweise das Produkt aus der zugehörigen Spalte und der Zeile.

    Zum Beispiel so:

    51015
    2102030
    4204060
    6306090



    3.2
    Zum Anderen versuche ich grad eine Art Menüstruktur mit Listviews zu machen. Also eine Liste mit verschiedenen Punkten, welche auch schon korrekt angezeigt wird.
    Nun soll man, wenn man auf eins der Items klickt, auf eine neue Aktivity mit, entweder einem Untermenü, oder einem anderen Design kommen.
    Wie lässt sich sowas umsetzen oder ist mein Ansatz vielleicht völliger Blödsinn ?


    4.
    Wenn man auf eine neue Activity wechselt, sollte man dann die gerade noch aktive Activity beenden, oder dies nicht tun, damit man einfach wieder zurückkommt ?


    So das waren (erstmal) alle Fragen.
    Ich hoffe Ihr könnt mir helfen. ^^
  • Hi,

    hier mal ein paar Antworten. Da ich selber aber nicht der Spezialist bin. Nur unter Vorbehalt.

    1) - Kapselung
    - Wiederverwendung von erstellten Programmen
    - Vererbung
    Komplexe Probleme lassen sich nur noch so sicher lösen

    2) Android, Mac, Windows und auch Linux auf Grafischen Oberflächen arbeiten
    Ereignisse orientiert
    Dies hat den Vorteil, das ich nicht mehr prüfen muss, ob sich ein Status geändert hat.
    Die entsprechende Routine wird bei Änderung aufgerufen.
    Daher ist das Programmaufbau am Anfang (init) gleich, aber danach wartet das Programm
    nur noch auf Ereignisse

    3) Ich habe mir damals ein Buch gekauft und das anhand der Beispiele dann durchgespielt.
    Da ich früher auch Assembler und C programmiert habe, war der Umstieg für mich auch
    schwer. Der Vorteil liegt aber klar auf der Hand.
    Leider kann ich keine gute Seite empfehlen, da ich hierbei bereits festgestellt habe, das
    eine Menge Beispiele auf alte Android-Versionen aufbauen.
    Wenn Du also das ganze für die aktuelle Android-Version lernen willst, wirst Du nicht
    um ein Buch drumherum kommen. (Vielleicht hast Du oder jemand anderes bessere Ideen)

    3.2 Hier muss ich passen
    4.0 Hier muss ich passen.

    Viele Grüße
    R.
  • Oh, wow. Ich hätte gar nicht mehr mit einer Antwort gerechnet, denn die angeblich größte deutsche Android-Entwickler Community scheint ja recht tot zu sein.
    Also danke schonmal für Deine Antwort. :)


    1.
    Die Kapselung und die Wiederverwendbarkeit hat man aber auch bei prozeduraler Programmierung. Das mit der Vererbung ist ja ganz nett, seh ich aber nicht als extremen Vorteil. Vielleicht bin ich aber auch einfach noch nicht komplett dahintergestiegen.

    2.
    Aber wie ist denn das dann bei Spielen ? Da muss es doch eine Art Hauptschleife geben, weil da ja auch die ganze Zeit Bewegung ist. Oder wird das nur mit einer Art While...Wend-Schleife gemacht ?

    3.
    Also wenn es ältere Tutorials sind ist das ja nicht schlimm, aber es gibt leider nicht sehr viele gute für Kotlin.
  • Hi,

    nur ja, sehr viel traffic ist hier wirklich nicht, aber dafür in deutsch. Wenn Du mehr erwartest, musst Du Dich im englisch einsprachigen Bereich umsehen.

    Zu. 1
    Generell will ich Dich nicht vom prozeduraler Programmierung abbringen. Diese Ansatz ist nur nicht mehr zeitgemäß.
    de.wikipedia.org/wiki/Objektorientierte_Programmierung

    Hier auch ein Buch zu Java:
    openbook.rheinwerk-verlag.de/javainsel/

    Zu. 2
    Das wird über den Eventhandler gemacht.
    Das gesamte Konzept kannst Du hier nachlesen (leider nur in englisch)
    developer.android.com/docs

    zu 3.
    Da ich in Java die ganze mache, kann ich Dir in Kotline nicht helfen.

    Schau Dir diese PDF mal an.
    uni-trier.de/fileadmin/urt/doku/android/android.pdf
    Im Kapitel 6 wird der Lebenszyklus einer App erklärt. Vielleicht hilft das ja das Verständnis zu verbessern.


    Eine Menge Beispiele kannst Du auch hier finden:
    github.com/android
    Hier schau ich auch immer mal nach, wie andere das machen. Leider sind die Beispiele nicht immer aktuell
    und die meisten sind leider nur in Java.

    Viele Grüße
    R.
  • Aber daß sich sie Seite hier dann als 'größte' deutsche Community bezeichnet ist irgendwie unpassend, finde ich. Da ist auf Android-Pit mehr los. ;)

    1.
    Ausreden brauchst Du mir das auch nicht, denn ich habe mich ja aus freien Stücken der OOP zugewandt. Nur fehlt es mir grad noch an eingen Stellen am Verständnis dafür. Vor Allem die Vorteile sind mir noch nicht ganz klar, obwohl ich schon massig Erklärungen dazu gelesen habe.
    Aber das wird schon noch. :)

    Java wollte ich zuerst lernen, habe dann aber schnell gemerkt daß Kotlin die bessere Sprache ist, weil Java vieles einfach viel zu kompliziert macht.

    2. & 3.
    Danke für die Links. Das werde ich mir mal durchlesen.

    Und danke für Deine Hilfe im Allgemeinen. Das wird mich (hoffentlich) voranbringen. :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von TM_0815 ()

  • Hallo
    Ja das Forum ist nicht gerade gut unterstützt von Seiten der Admins. Der einzige von dem Team der mal etwas macht ist @Kogoro-Christoper. Der Admin des Forums hat schon lange keinen Beitrag mehr geschrieben. Stimmt in anderen Foren kümmer sich die Admins und Mods besser und geben auch relativ schnell Antwort.
    Hier in den Forum kommt es mir so vor als ob nur ich hier antworten gebe.


    An Deiner stelle würde ich deine Fragen dann doch vielleicht in den von dir genannten Forum stellen. Da sind auch die meisten Entwickler verträten.

    Mir scheinen als ob die Admins hier keine Lust mehr haben. Habe ich auchfestgestellt.



    Zu deinem ersten Thread.
    1. OOP hat den Vorteil das du relativ einfach fertige Libs einbinden kannst brachst also nicht das Rad immer wieder neu erfinden. Ist auch übersichtlicher und durch die Kapselung auch Daten sicherer.


    2. Eine Main Methode gibt es in Android nicht wird nicht benutz. Es ist zwar Java aber du befindest dich auf einen Framework . Dieses Läuft in einer Java Maschine unter einer Linux Umgebung. Stelle dir das so vor Android ist ein Java Programm was aus vielen App besteht. Apps Besser Activitys werden von Android also den Framework mittels Intents gestartet. Dazu braucht es keine Main Methode. Du leitest eine Kasse von Aktivity ab und bist somit auf dem Framework. Was ja immer läuft, im sind alle Activitys die es gibt bekannt.


    3. Learning-by-doing OK aber Grundlagen sind wichtig ohne kommst du an die Grenzen siehst du ja bereits.


    3.1 da würde ich vielleicht ein Array machen dort die werte eintragen bzw berechnen und dann in einer Liste oder was auch immer an zeigen.
    Genauso geht das in einer ArryList mit einer Daten Klasse. Da sind wir wieder bei den Vorteilen von OOP.


    3.2 wenn du auf einen Klick reagieren willst wie währe es mit dem setzen eines Listner auf deine ListView. Dort kommt dann dein Klick an.


    Zu deinen anderen Fragen währe etwas Code von dir hilfreich um sinnvolle antworten zu geben.


    4. Activtys sind abgeschlossen Einheiten. Jede hat ihren eigenen LiveCycle. Beim zu rückkommen wird immer die onCreate Methode durchlaufen. Es wird auch eine neue Instanz Objekt deiner Klasse erstellt somit sind eigentlich alle Variablen in der Klasse Activty nicht mehr vorhanden. Ein Intent startet die Activity neu.



    >Generell will ich Dich nicht vom prozeduraler Programmierung abbringen. Diese Ansatz ist nur nicht mehr zeitgemäß.

    Das ist Ansicht Sache, aber du bist hier in Android das ist ein Java Framework was OOP ist. Java ist eine reine OOP Sprache. In Kotlin ist es zwar möglich auch Strukturiert zu programmieren. Nur bist du auf Android und da hast du keine andere Möglichkeit. Denn Kotlin erstellt denselben Bytecode wie Java.



    Wenn du konkrete Fragen mit Code stellst kann dir vielleicht auch einer helfen.

    PS 'größte' deutsche Community Wo liest du das?
    ok habe es gesehen stimmt ist wirklich etwas übertrieben .
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • Hi jogimuc und auch Dir vielen Dank für Deine Antwort. :)

    Also die selbst gegebene Bezeichnung ist tatsächlich unberechtigt und eigentlich könnte man die Seite zumachen, wenn eh nichts mehr los ist und sich selbst die Admins nicht drum kümmern. Aber naja...


    1.
    Also die Einbindung externer Bibliotheken gibt es auch in prozeduralen Programmiersprachen. Das ist somit nichts Besonderes. Den einzigen sinnvollen Vorteil seh ich aktuell nur in der Vererbung. Aber ich bin auch noch nicht komplett dahintergestiegen.

    2.
    Na die Main-Klasse gibt es doch aber. Das ist doch der Einstiegspunkt bei Android, oder meintest Du damit eine Hauptschleife ?

    3.
    Da gebe ich Dir absolut Recht, aber die Grundlagen lerne ich ja hauptsächlich durchs Ausprobieren. Versuch und Irrtum sozusagen. :D

    3.1
    Das mit dem Array habe ich mir auch so gedacht. Ich wusste nur nicht wie man dann mehrere Einträge in ein Listview bekommt. Mittlerweile habe ich aber mitbekommen, daß man die quasi selbst designen kann.

    3.2
    Das habe ich mittlerweile auch schon hingekriegt. Ich dachte am Anfang man könne nur das View ansich abfragen, nicht aber jeden einzelnen Eintrag. Hab aber rausgekriegt wie es funktioniert. :)

    4.
    Das es abgeschlossene Einheiten sind wusste ich. Ich wusste nur nicht, daß eine Activity jedesmal beim Aufruf neu gestartet, also nicht 'gecacht' wird.


    Da ich für Android programmieren will, muss ich mir natürlich OOP aneignen und das will ich auch. Es soll nicht so rüberkommen als würde ich Apps in prozeduraler Weise programmieren wollen. Ich wusste vorher schon, daß ich für Android OOP lernen muss und habe mich ja bewusst dafür entschieden. Denn der Mensch wächst ja mit seinen Aufgaben. ;)
    Es ist aber nunmal so, daß man, wenn man am Anfang einer neuen Aufgabe steht, nur einen Urwald sieht, um es mal bildlich auszudrücken. Das Ziel ist es nun, jeden Baum mit Namen zu kennen und bis dahin muss man sich eben erstmal durch allerhand Dickicht schlagen. :)
  • Hallo aus welcher Programmierer ecke kommst du? Bzw. welcheSprache hast du bisher benutzt?

    Ich komme auch aus der C / C++ ecke mit und ohne OOP. Auch ich habe am Anfang etwas mit dem OOP Schwierigkeiten gehabt.

    Eigentlich ist Android nicht so gut geeignet um das Programmieren mit OOP zu lernen.
    Ist zwar Java oder Kotlin aber es gibt einige unterschiede zum Programmieren mit Java Kotlin auf Desktop PC.


    Der erste ist das Android eigentlich kein Betriebssystem sondern ein Framework ist. Es gibt dort keine „main“ Methode oder auch Funktion um mit Worten von C und Kotlin zu sprechen.


    Schaue dir mal an wie ein Java, C++,Kotlin Programm für einen Desktop Pc aus schaut. Dort erbt eigentlich deine Start Klasse nicht von irgendetwas. Die enthält auch immer eine main() Funktion die beim Programmstart aufgerufen wird.


    Das ist in Android nicht so.Du erbst von der Klasse Acticty oder AppCompatActivity und dort überschreibst du Methoden „Overeide“ der geerbten Klasse(super Klasse). Dies sind Callback Methoden vom System, und werden vom System selbstständig aufgerufen.


    Als sogenannte einstiges Methode kannst du die „onCreate“ betrachten die wird beim Activity Start immer aufgerufen.

    Um das besser zu verstehen solltest du dir den Activity Lifecycle ansehen. Auch wenn du immer nur Learning-by-doing machst wirst du da nicht drum rum kommen.

    developer.android.com/guide/co…vities/activity-lifecycle


    Das Framework ist eigentlich ein Java Programm was immer läuft und deine Klassen zu Laufzeit hinzufügt und Startet. Dieses Framework wurde beim Handystart mit der main() Methode gestartet und läuft jetzt immer. Des halb gibt es auch keine main Funktion in Android .


    Android und Java arbeiten mit Listnern die du auf deine View Element zb Button setzt. Und der Listner was wieder eine Callback Methode ist wird aufgerufen wenn du auf den Button klickst. Dies ist auch mit Java oder Kotkin auf einem Desktop Rechner nicht viel anders. Nur das du dort die Instanzen der Views andrer holst. Und die Listner anders setzt.


    Es gibt hier auch keine Konsole wo du eine einfach Ausgabe und Eingabe machen kannst.Android ist eine GUI diek komplet grafisch und nicht Text orientiert arbeitet. So wie es zb mit Standard C möglich ist eine printf ausgabe zumachen geht in Android nicht.


    So ich denke das reicht erstmal.


    Ob nun Kotlin für das Lernen mit OOP das richtige ist, glaube da Streiten sich die sich die Gemüter. Ich Persönlich denke das Java für den Anfang verständlicher ist als Kotnin .
    Auch wen Java etwas mehr Tipp Arbeit ist.
    Vorfallen willst du ja erst mal das Prinzip was hindere der AndroidProgrammierung steckt verstehen, und da denke ich ist Java besser eeignet.



    Von welcher Sprache kommst du ? Weil du noch nie mir OOP in Berührung gekommen bist. C++, C#, Perl, Python, PHP, VB, Ruby, Swift, … selbst Pascal können OOP.
    Ein Feedback auf Tipps ist auch schön. :P
  • Quellcode

    1. // Java PC OOP da Java nur OOP kann
    2. public class HelloWorld {
    3. public static void main(String[] args) {
    4. System.out.println("Hello, World");
    5. }
    6. }
    7. // Kotlin PC ohne OOP
    8. fun main(args: Array<String>) {
    9. println("Hello World!")
    10. }
    11. // Kotlin PC mit OOP
    12. class Ausgabe(val st: String) {
    13. init {
    14. println(st)
    15. }
    16. }
    17. fun main(args: Array<String>) {
    18. Ausgabe("Hello World")
    19. }
    20. // Android Kotlin keine main fun
    21. class MainActivity : AppCompatActivity() {
    22. override fun onCreate(savedInstanceState: Bundle?) {
    23. super.onCreate(savedInstanceState)
    24. setContentView(R.layout.activity_main)
    25. }
    26. }
    Alles anzeigen
    Ein Feedback auf Tipps ist auch schön. :P
  • Die Livecycles hab ich mir mitlerweile auch schon angeschaut und das System 'Android' habe ich mittlerweile verstanden, denke ich. Aber wenn man ein neues Projekt in AndroidStudio erstellt, wird automatisch eine Mainklasse erstellt. Deswegen dachte ich, daß die zwingend erforderlich ist.

    Wie ist das aber bei Anwendungen die zwingend eine Wiederholung benötigt, also zum Beispiel bei Spielen ? Erstellt man dann innerhalb einer Klasse einfach eine While---Wend-Schleife ? Ich hab mich damit noch nicht auseinandergesetzt, da ich erstmal die ganzen Views lernen muss.

    Zutun hatte ich bisher mit verschiedenen Basic-Dialekten, PHP, Html, MySQL und sowas. C hatte ich mir auch mal angeschaut, aber das war noch zu einer Zeit, als man noch 2 A4-Seiten schreiben musste um ein einfaches Fenster zu öffnen. ;)
  • >Aber wenn man ein neues Projekt in AndroidStudio erstellt, wird automatisch eine Mainklasse erstellt.

    Du verwechselst hier etwas Klasse und die „main“ Methode, Prozedur oder auch Funktion wie sie in fast allen sprachen als StartPunkt genommen wird.

    Ja die erste Activity die das Studio erstellt heißt Main_Activty. Das ist aber nur der Name der Klasse kann auch anders heißen. Welche Activity beim klick auf das Icon im Homescreen gestartet wird in dem Manifest des Projektes festgelegt. Eine Methode die sich Main nennt gibt es nicht in Android.

    In Java oder Kotlin schon nur wird die hier nicht gebraucht sagte ich bereits.

    HTML, SQL sind eigentlich keine Programmierer Sprachen .

    >C hatte ich mir auch mal angeschaut, aber das war noch zu einer Zeit, als man noch 2 A4-Seiten schreiben musste um ein einfaches Fenster zu öffnen.

    Das siehst du ach wieder den Vorteil der OOP also alles in Klassen zu kapseln und dort auch schon alles mit Default Einstellung zu belegen. Dann brauchst du nur ein Objekt dieser Kasse erstellen und es benutzen. Du hast eine Ref. (Instanz) des Objektes und greift dann einfach darauf zu.

    Ständige Wiederholungen würde ich über Zeitschleifen, Timer und Threads lösen. Bedenke das das du den UI Thread nicht anhalten solltest denn sonst gibt es eine ANR.

    developer.android.com/topic/performance/vitals/anr

    Ereignisse werden über Intenss in Android gehandelt die du mit Listner (callback Fiktionen) abfangen kannst und dort deine Code aus führen kannst.

    Das Event Handling ist schon etwas anders als auf einen PC. Es gibt nicht eine einzige Event Händler Routine wie bei einen PC Programm. Das löst man über verschiedene Listner.

    Deshalb musst du auch für deinen Views (Button) einen Listner erstellen. Denn dort kommt das Event an.Hast du zb. auch eine Liste, Menu , Spinner … wird es immer einen eigenen Listner geben. In dem du arbeitest.

    Ein Vorteil von Kotlin istdas du das Suchen der ID mit finfViewById wie in Java nur noch selten machen musst. Das nimmt dir Kotlinmit einem Plugin ab.

    Das setzen des Listner zu den Elementen musst aber auch noch selber machen ist aber auch hier einfacher geworden. Dank lambda expression die es zwar auch in Java gibt aber nicht so mächtig wie in Kotlin.

    Mit interface kannst du aber auch Listner zusammenfassen, um zb alle Button in einer Methode bearbeiten zu können.
    Ein Feedback auf Tipps ist auch schön. :P
  • Diesen Link den dir @Ritchie schon gegeben hat solltest du dir wirklich ansehen . Ist zwar Java . Aber als Koltin Entwickler sollte man auch Java können.

    So etwas in Kotlin sucht man vergebens im Netzt dazu auch noch kostenlos und in Deutsch.

    uni-trier.de/fileadmin/urt/doku/android/android.pdf

    Das man als Kotlin Entwickler auch Java kann wird meistens vorausgesetzt. Die meiste Hilfe wird du auch noch in Java finden.
    Ein Feedback auf Tipps ist auch schön. :P
  • Ich seh es nicht so, daß man Java können muss, um Kotlin zu verstehen. Wäre ja Quatsch zwei Programmiersprachen zu lernen, wenn eine reicht und diese auch viel intuiiver als Java ist. Aber das Programmierparadigma muss man sich natürlich aneignen.

    Den Link habe ich mir durchgelesen und dabei auch schon einiges gelernt. :)
  • Wenn du die PDF Datei verstanden hast kannst du auch etwas Java. Java und Kotlin nicht so extrem verschieden.
    Auf jeden Fall ist es sinnvoll die Syntax von Java zu kennen um auch Beispiele Tutoriell die es momentan nur in Java gibt zu verstehen.
    Es ist ja auch möglich Java Kassen unter Kotlin weiter zu benutzen und da hilft ein gewisses Grund Verständnis schon.
    Ein Feedback auf Tipps ist auch schön. :P
  • Die meistens Tutorials die ich gefunden haben erklären Kotlin auf dem PC nicht Android.
    Die Eigenheiten von Android Framework werden somit nicht behandelt. Deshalb auch das mit der Main Funktion die in den Tutoriell vorkommt beim PC.
    Die meisten auf Android bezogen Tutorials sind immer noch in Java. Zu mindestens Video Tut.
    Gebe mir doch mal ein paar links von denen du gelernt hast.
    Ein Feedback auf Tipps ist auch schön. :P