OOP - erste Fragen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ein Gültigkeitsbereich gibt an, in welchem Bereich welche Variablen (bzw. Daten im Allgemeinen) verfügbar sind. Im Prinzip erzeugst du mit jeder Funktion einen Gültigkeitsbereich:

Code: Alles auswählen

def func():
    spam = 42

ham = 23
"spam" existiert hier num im Gültigkeitsbereich von "func", aber nicht im globalen Gültigkeitsbereich. Du kannst also nur von innerhalb der Funktion auf "spam" zugreifen. "ham" hingegen liegt im globalen Gültigkeitsraum und ist auch aus "func" (welches ebenefalls im globalen Raum liegt) erreichbar. Bei Python (und bei vielen anderen Sprachen auch), kannst du Gültigkeitsbereiche in einander verschachteln und aus dem inneren Bereich auf den äußeren zugreifen.

Namensräume sind im Prinzip sehr ähnlich zu Gültigkeitsbereichen: mit Namensräumen kannst du eine Hierachie von Namen aufbauen, auf die du dann (auch von außen) zugreifen kannst. In Python kannst du Namensräume mit Modulen und Klassen aufsannen:

Code: Alles auswählen

class Spam(object):
    def ham(self, ...):
        ....
"Spam" ist nun ein Namensraum, in dem sich der Name "ham" befindet. Von außen kannst du nun darauf mittels "Spam.ham" zugreifen. Das ganze kannst du natürlich beliebig verschachteln:

Code: Alles auswählen

class Spam(object):
    class Ham(object):
        class Eggs(object):
            def foo(self, ...):
                ...
Damit hast du dann die Namensräume "Spam", "Ham" und "Eggs", welche alle ineinander verschachtelt sind.

Das ist natürlich alles nur sehr grob und oberflächlich beschrieben, für den Anfang sollte das aber reichen.
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Gary123456 hat geschrieben:Frage ist immer noch diesselbe: ":roll: Uuups entschuldige. Hier der Link: http://tutorial.pocoo.org/ Ich kann mir einfach nicht genau vorstellen, was ich unter diesen Begriffen verstehen soll. Ich habe diese 2 Seiten mind 5 mal durchgelesen und ich verstehe teilweise nur Bahnhof."
In der Frage fehlt immernoch _was genau_ du nicht verstehst. EyDus Schrottflintenansatz mag helfen oder nicht, ist aber in jedem Fall fuer den Ersteller zeitaufwendig fuer dich aber nicht unbedingt zielfuehrend.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Na, wenn die mal nicht nach hinten los geht...

@Gary: Ich werde das Gefühl nicht los, dass Du zuviel auf einmal willst. Als Tipp - geh es langsamer an, such Dir kleine Problemstellungen und Spielideen, die Du umsetzen möchtest. Dabei wirst Du Fehler machen, aus denen Du lernen kannst und Dir die Welt des Programmierens Schritt für Schritt erschliesst. Den ganzen paradigmatischen Überbau von Anfang an erfassen zu wollen, ist doch öde, da Du den Sinn dahinter höchstens vermuten kannst. Über den spielerischen Zugang macht die Sache Spaß, über den Nürnberger Trichter ohne gewisse Vorkenntnisse - nunja...
So hab ich lange Zeit glücklich ohne jedwede Kenntnis von OOP in Turbo Pascal vor mich hin programmiert (bis hin zu einem kleinen GUI-Toolkit), dann kam Delphi mit Object Pascal und ich dachte - pff, was soll das, diese Objektdinger mit Prozeduren dran brauche ich nicht. Es hat noch eine ganze Weile gedauert, bis ich erkannte, dass ich mit records und units was Vergleichbares gemacht hatte und dass es eigentlich toll ist, wenn einem die Sprache dabei entgegen kommt (Der darauffolgende Switch zu C war dann eher traumatisch für mich ;) )
Das soll kein Plädoyer dafür sein, dass Du die Entwicklung der Programmiersprachen nachvollziehen musst, um die Konzepte dahinter zu verstehen. Mir gehts eher darum - lerne laufen, entdecke den Spass am Laufen - dann wird Fahrradfahren sehr viel leichter.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Naja, ich hatte schon etwas davor geproggt. Auch etwas größere Tools. Da mir diese Sprache zu "langweilig" wurde, bin ich nach Python umgestiegen. Durch "EyDu" habe ich das jetzt alles verstanden und bin richtig froh darüber.

Zu einer ganz anderen Sache:
Ich habe mir vorgenommen ein größeres Chatprogramm zu schreiben mit richtiger GUI. Nun weiß ich, dass das nicht in paar Wochen geht sondern habe mir ca. an die 9Monate vorgenommen. Dazu habe ich einen Partner gefunden, der mit mir diese Sache proggt. Klingen diese 9 Monate realistisch für Threads, Netzwerkprogrammierung, OOP und TKINTER? Oder ist das viel zu wenig? Innerhalb dieser 9 Monate will ich mit ihm rein planen und die Sache richtig angehen. Ich denke Planung ist das A und O für ein solch großes Projekt.

Wäre um Antwort sehr dankbar! :D
BlackJack

@Gary123456: Das lässt sich schwer als Aussenstehender einschätzen. Es kommt ja darauf an wie schnell Du die Sachen lernst. Und auch auf Deinen Kollegen — lernt der gleich schnell, oder schneller und kann Dir was erklären, oder langsamer und hält damit auf…
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich glaube du hast ein paar andere Vorstellungen was "grosses Projekt" bedeutet als die meisten hier.

Aber das ist komplett irrelevant, ebenso wie die Zeitplanung: Vergiss sie, damit setzt du dich nur unnoetig unter Druck. Planung ist aber durchaus wichtig: Skizziere welche Features du haben willst, suche entsprechende Python-Module, lies dir die Basics an und wie man die Module benutzt. _Das_ ist der wichtige Teil bei einem "Hobby-Projekt" (ohne es abwertend zu meinen).

Zu guter letzt: Verabschiede dich von der Vorstellung am Anfang alles bis zum Ende durchzuplanen. Setz dir/euch stattdessen kleine Meilensteine, die am besten auch noch benutzbar sind.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ich will gerne wissen, ob das zu schaffen ist - bzw. was der Durchschnitt so ist. Ich habe ihm ca. 9 Monate gesagt. Ich würde aber gern eure Meinung wissen, was der durchschnittliche Mensch Zeit dafür verbraucht. bzw. eine Zeitspanne.

Ich werde mich auch nicht unnötig unter Zeitdruck versetzen, denn mir ist es total egal ob das 9 Monate bzw 15 Monate sind. Ich will meinem Kollegen das "zum Geschmak machen".
Zu guter letzt: Verabschiede dich von der Vorstellung am Anfang alles bis zum Ende durchzuplanen. Setz dir/euch stattdessen kleine Meilensteine, die am besten auch noch benutzbar sind.
Ich meine vom Design her ungefähr ziemlich viel.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Gary123456 hat geschrieben:Ich will gerne wissen, ob das zu schaffen ist - bzw. was der Durchschnitt so ist. Ich habe ihm ca. 9 Monate gesagt. Ich würde aber gern eure Meinung wissen, was der durchschnittliche Mensch Zeit dafür verbraucht. bzw. eine Zeitspanne.
Für ein simples Chat-Programm würde ich vermutlich keinen Tag brauchen. Ein bombensicheres System das auch Hochlast aushält und viele Features mitbringt kann beliebig lange dauern.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ui Vorraussetzung wäre ja, dass man ja schon alles weiß. Aber da die Frage eig völlig irrelevant ist, wie lange man braucht, möchte ich meinem "Kumpel" eine ungefähre Dauer von 9-11 Monaten angeben. Dann kann er sich wenigstens vorstellen wie groß dieses Projekt ist.

Und ach ja: Ich bin ja mal wieder so nett und lerne Englisch, denn der "Kumpel" kann nur Englisch sprechen. Da seht ihr doch mal, dass ich ganz brav bin. :P

Das Projektz soll schon sehr groß werden, d.h. ein völlig auf GUI basierendes Programm, dass sicher funktioniert und auch ohne Probleme Verbindungen aufbauen kann. Dateiversand wäre auch schön. So ähnlich wie Skype.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Gary: Die Tatsache, das Du hier so versessen auf eine Zeitangabe bist, zeigt, dass Du Dir noch nicht viele Gedanken um ein solches Projekt und dessen konkretes Umsetzung gemacht hast. Hilft es Dir, wenn ich Dir sage, dass man einen sehr simplen Chat-Client mit einem einfachen Server in 2-4h aufgesetzt hat? (dank der tollen Module, die Python so kennt) Mit Super-Duper-Funktion XY oder eigenem Protokoll, P2P-Architektur können da schnell ein paar Monate draus werden. Was fängst Du jetzt mit der Information an? Richtig - überlegt euch, was das Ziel ist, welcher Funktionsumfang etc. und vorallem, was Ihr davon umsetzen könnt.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ja, das werde ich auch machen mit ihm. Ich denke, dass dieses Thema erstmal gemacht ist. Werde mir mal andere Chatprogramme wie Skype,ICQ etc. ansehen und mal gucken, was ich an denen gut bzw. schlecht finde. Danke!
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Gary123456: noch ein Tipp. Fangt am besten ganz klein an. Solche Projekte tendieren dazu, von alleine groß zu werden. Du wirst auch bei einem ganz kleinen Projekt so viel lernen, dass irgendwann der Punkt kommt, wo Du denkst, was hast Du Dir nur dabei gedacht und alles nochmal verwirfst und von vorne anfängst, weil Du dann weißt, wie es besser geht. Ich hatte etliche mittelgroße Projekte (1-2 Monate) die ich während dieser Zeit 3 bis 4 mal komplett umgeschrieben habe. Dabei ist das keine verlorene Zeit, sondern ein ganz normaler Prozess, den Python durch seinen dynamischen Ansatz auch noch perfekt unterstützt.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ich glaube während dieser ca. 10 Monate Lernzeit werde ich auch noch kleinere Projekte starten :)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Vergiss einfach die Zeitabschätzung. Das ist einfach nicht möglich, da du selber noch nicht weißt, was du kannst und was nicht. Im Prinzip ist das Projekt recht klein und gut schaffbar. Macht euch einfach eine Liste von Features, welche ihr haben wollte, sortiert diese danach was ihr unbedingt haben wollt und fangt an es zu implementieren. Da braucht es keine große Planung oder Abschätzung, man muss einfach anfangen. Und wundert euch nicht, wenn ihr große Teile des Codes wegwerfen müsst. Das ist am Anfang normal.
Das Leben ist wie ein Tennisball.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ui mich würde interessieren, welche kleinere Konsolen-Anwendungen ich schreiben könnte, die dennoch sinnvoll wäre. Hätte jemand Vorschläge?

Das großes Projekt ist im vollen Gange. Suche mir aber während der "Lernzeit" etwas Ablenkung :lol:
Antworten