LINUX.ORG.RU

как понять ооп?

 , ,


5

2

ковыряю скрипт на пистоне, вроде пара строк, а вообще не втыкаю. класс там, объект, какай-малай, шайтанама. накидайте статеек или книжек, осилить собираюсь в кратчайшие сроки

Перемещено mono из talks

★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от nanoolinux

а использовать не могу. нужна мурзилка

xsektorx ★★★
() автор топика

Как это можно не понять?

Нет, я понимаю что можно не понять плюсовую шаблонную магию или мозговыносящее ФП, но это?

Deleted
()

Его не обязательно использовать.

А если тебе нужна книга для обучения ООП, то Б.Мейер «Основы объектно-ориентированного программирования».

tailgunner ★★★★★
()
Ответ на: комментарий от Deleted

я понимаю в целом, а вот вместо кода вижу фигу. я по-серьёзному кодом только сегодня занялся (до этого были только совсем простые скрипты), пытаюсь освоить с наскока

xsektorx ★★★
() автор топика
Ответ на: комментарий от tailgunner

я уже имеющийся скрипт разбираю, так что нужно

xsektorx ★★★
() автор топика
Ответ на: комментарий от xsektorx

тебе щас накидают книжек про плюсы и джаву, только это не то. ооп в питоне свое, самобытное и незалежное. хотя, вроде, из smalltalk идеи потырили.

так или иначе, многого, чем перегружены плюсы (и даже джава, не говоря о .net) в питоне нет. зато есть метаклассы, и объекты на 100% динамические

ты хоть скажи, на что наткнулся? metaclass, type, getattr[ibute] или что вызывает проблемы? тогда смогу указать на конкретный туториал

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

на «class Singleton(object):», «def __new__(cls, *args, **kwargs):» и «cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)». насколько я понимаю, это вообще элементарщина но не втыкаю, хоть убей. особенно super()

xsektorx ★★★
() автор топика
Ответ на: комментарий от Deleted

Это только кажется, что классы и объекты это что-то простое и понятное. Если человек начинал с мозговыносящего ФП, то классы будет понять не очень просто.

PolarFox ★★★★★
()
Ответ на: комментарий от xsektorx

насколько я понимаю, это вообще элементарщина

Это метакласс, нужно такое редко и это ни разу не элементарщина. Если у тебя такое в скрипте на пару строк, то где-то там упоротость (ну либо сам ты потроллить вышел).

tailgunner ★★★★★
()
Ответ на: комментарий от xsektorx

http://stackoverflow.com/questions/8106900/new-and-init-in-python

__new__ is for object creation

вызывается для создания объекта.

super

это как base, родительский класс. синтаксисов вызова super дофейхуа, но в данном случае тупо вызывается родительский __new__ с теми же аргументами

если libastral не врет, что у тебя там еще if есть и return, то смысл такой:

если в пространстве имен cls (аргумент __new__ - класс создаваемого объекта) нет поля _instance, то создаем новый объект, как завещали предки (object) и возвращаем его как результат вызова __new__ (попутно сохраняя в _instance). иначе просто возвращаем то, что там было.

иначе говоря, базовый синглтон, от которого можно наследовать сколько угодно разных синглтонов :)

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)

Для понимания ООП лучше постигать его основы _не_ на примере питона. Java - хороший вариант, можно еще С++, но это сложнее.

trex6 ★★★★★
()
Ответ на: комментарий от tailgunner

не скрипт на пару строк, а вот этот класс на пару строк, который я нихрена не пойму. так что насчёт мурзилки по этому поводу?

xsektorx ★★★
() автор топика
Ответ на: комментарий от MyTrooName

ещё и синглтон какой-то. до дома дойду, попробую распарсить написанное. иф есть, но в теле функции, а не класса

xsektorx ★★★
() автор топика
Ответ на: комментарий от xsektorx

в теле функции, а не класса

ну, в теле функции __new__ ?

синглтон

это класс, у которого разрешено создавать не более чем один экземпляр. и каждая последующая попытка создать новый экземпляр должна вместо этого возвращать самый первый

>>> a = someclass()
>>> b = someclass()
>>> a is b # разные объекты
False
>>> a = Singleton()
>>> b = Singleton()
>>> a is b # один и тот же объект
True
MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 2)
Ответ на: комментарий от xsektorx

тогда можно вообще в детали не вдаваться. просто разберись, что такое синглтон. а этот класс - базовый синглтон (для надежности, все же, полный код приведи)

MyTrooName ★★★★★
()
Ответ на: комментарий от trex6

Ожидал встретить тонны рваного говна в ответах на твой пост, но по факту — лишь тишина. Неужели СЛИШКОМ ТОНКО? :D

Manhunt ★★★★★
()

осилить собираюсь в кратчайшие сроки

Лаборатория юного линуксоида: «Введение в объектно-ориентированное программирование (ООП) на Python» (12 уроков).

quickquest ★★★★★
()
Ответ на: комментарий от Manhunt

Это реалии жизни. Есть опыт преподавания ООП на основе питона. Рождает очень много непонимания у студентов из-за возможности создавать динамически поля у объектов.

trex6 ★★★★★
()
Ответ на: комментарий от xsektorx

на «class Singleton(object):», «def __new__(cls, *args, **kwargs):» и «cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)». насколько я понимаю, это вообще элементарщина но не втыкаю, хоть убей. особенно super()

«def __new__(cls, *args, **kwargs):»

super()

это нифига не элементарщина, а наоборот очень сильное колдунство, с наскока ты точно не осилишь. лорчую ссылку на вики из этого коммента [как понять ооп? (комментарий)], там и пример синглтона есть, посмотришь заодно.

Virtuos86 ★★★★★
()

Вот твоя аватарка — объект
у него 3 поля: приватная рука, публичный чел в панаме и protected-кот
Сами по себе эти поля могут быть и объектами, например кот: у него возможны поля кол-во лап, интеллект, коэффициент няшности etc; или примитивами: например публичный чел в панаме.
Я, как другой объект, могу рассказать все о челе в панаме, и лишь публичные методы руки, т.к. ее идентификатор - приватный. Т.е. если рука, хочет, что бы я знал, кому она принадлежит, она пишит публичный публичный геттер для соотв. поля и я его уже читаю. Т.е. абсолютный контроль: что рука написала в методе, то я и выполню. Изменить тело я не могу. Это называется инкапсуляции, и в питоне этого нет! ибо это не чистый ООП.
Теперь, предположим, мы хотим объявить еще один объект на твою аватарку - еще одного кота только с другой окраской.Конечно, можно быть индусом^W^W написать еще один класс, и выделить его инстанс, но мы - программисты ленивы, и потому напишем класс, с неким идентификатором, и перечислим только те поля, которые хотим изменить у дефолтного кота. Это называется наследование.
А еще кот может иметь разные методы с одним именим, что позволит вызывать определенную реализацию, в зависимости от его внутреннего состояния. Это полиморфизм.
Итог: ООП, это очень круто, ведь оно позволяет описать ЛЮБОЙ объект. Именно ппо этому оно и получило такое распространение в Ънтерпрайзе.

//P.S. то что я опять ссылаюсь на твою аватарку ничего не значит, просто не придумал ничего лучше для примера.

comp00 ★★★★
()
Ответ на: комментарий от xsektorx

класс на пару строк, который я нихрена не пойму.

Window mainWindow;
Button but;
TextArea txtAr;
but.setText("Send");
txtAr.setHint("Edit me");
mainWindow.add(but);
mainWindow.add(txtAr);
mainWindow.show();

Да очень трудно, не понятно и не читабельно!

comp00 ★★★★
()
Ответ на: комментарий от trex6

Есть опыт преподавания ООП на основе питона.

ТЫ говори как есть: нет в питоне полноценного ООП.
Питон вообще стоит учить одним из последним.

comp00 ★★★★
()
Ответ на: комментарий от xsektorx

осталось синтаксис

Что не так с синтаксисом? Есть специальные синтаксические конструкции. Описываешь класс, конструкторы-деструкторы, геттеры-сеттеры, приватные методы. Профит. Нет никаких проблем с синтаксисом, это не лямбды, где можно потеряться.

применение

Пример с окошкам не случайно, ООП де-факто развилось благодаря GUI. Но применение исключ. для GUI совершенно необязательно.
Идея ООП в построении модели. Вот предмет, ты его моделируешь на синтаксисе языка: его св-ва, действия и т.д. А потом просто работаешь с этой моделью, как с самим предметом. И не важно что это: кот, бутылка или сокет.

comp00 ★★★★
()
Последнее исправление: comp00 (всего исправлений: 1)
Ответ на: комментарий от thesis

структура пока не видел, щас разберу

xsektorx ★★★
() автор топика
Ответ на: комментарий от comp00

с синтаксическими конструкциями всё в порядке, просто я в них пока не разбираюсь. надо осилить

xsektorx ★★★
() автор топика
Ответ на: комментарий от trex6

Это реалии жизни. Есть опыт преподавания ООП на основе питона. Рождает очень много непонимания у студентов из-за возможности создавать динамически поля у объектов.

Вполне понятная реакция. Глядишь на классы в Python и возникает вопрос: если у нас функции — объекты первого класса, если у нас утиная типизация, то почему нельзя обойтись словарями функций?

Собственно, в Lua так и сделали. Там ни классов, ни объектов, а только таблицы функций, возможность назначать прототипы и правило, что x.y — это то же, что x["y"].

ТС, «обычные книжки по ООП» тут не особо помогут. В Python своё ООП. В том примере, который ты написал, оно ещё более своё. Ну и, наконец, если ты чего-то не понимаешь, то не стоит надеяться на волшебные средства, которые помогли бы тебе это понять за полдня.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 2)
Ответ на: комментарий от proud_anon

я надеюсь не на средства, а на подробное, дотошное описание того, что вообще происходит. полдня я не разбирал, я втыкал в код и пытался понять

xsektorx ★★★
() автор топика

Бертрана Мейера читай. Он даже вроде на intuit выложен в виде двух курсов. Если надо быстрее хоть что-то понять - первые главы Буча.

anonymous
()
Ответ на: комментарий от Siado

в магазин сходить - отнимет время

xsektorx ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.