Дурацкий вопрос

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
27 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Re: Дурацкий вопрос

Nikolay Kleptsov
Попробую зайти с другой стороны. Классы в Smalltalk являются объектами, только с небольшими дополнениями, а именно класс хранит поведение экземпляров и имена переменных и еще кое-что.
Создается экземпляр класса посылкой сообщения классу.
a := MyClass new.
Доступ к объекту можно получить через переменную, к которой он подсоединен. В данном случае это переменная а. Переменным хранят ссылки на объекты и только. Значение переменной можно изменить простым действием, например a := 40, a := b и т.д. После выполнения присваивания ссылка на объект изменяется. К переменной можно подсоединить любой объект даже класс.
Изменяя методы на стороне экземпляра . Можно изменить поведение всех объектов созданных от этого класса.
В примере описанных в предыдущих сообщениях. Лучше все делать в workspace.
Создаем объект экзепляр класса Class1.
a :=  Class1 new. Посылаем сообщение классу Class1>>new. В качестве ответа получаем объект экземпляр и присоединяем его к переменной а. Если вновь созданный объект не присоединить к переменной, то сообщение послать ему будет невозможно, будет отсутствовать ссылка. (Не получится дозвониться до человека по телефону, если нет его номера (ссылки), зная прекрасно что он существует или у него нет телефона, а он живет в другом городе). В отличии от строго типизованных языков типа С/С++ к переменной можно подсоединить любой объект, экземпляр любого класса.
Далее вновь созданному объекту посылаем сообщение
a x: 20. если метод существует он будет выполнен и переменной экземпляра х будет присоединен объект-число 20. Переменные объекта доступны только самому объекту, вне объекта они невидимы. Другим объектам видны только методы (но не переменные).
Важно не путать класс - хранилище методов или по другому его поведение и имена переменных с объектами в которых хранится текущее состояние объекта (объекты присоединенные к переменным экземпляра).
В классах хранится и другая информация (общие словари, переменные класса, категория и т.д.)
 


20 мая 2013 г., 4:08 пользователь Igor Stasenko <[hidden email]> написал:
2013/5/19 Genosse Alex <[hidden email]>:
> Всё, кажись прозрел! :) Ларчик просто открывался...
>
> Если мы создаём сообщением экземпляр класса  Class1  и присваиваем его некой
> переменной Class2.
> q:= Class1 new. То мы не просто присваиваем значение нового экземпляра
> класса  Class1, а получаем весь Class1 со всеми потрошками! Т.е. q теперь и
> есть  Class1 т.с. с исправленной фамилией в паспорте.
> Следовательно q можно, не торопясь, ступенчато передавать необходимые
> параметры.
> напр.
> q x: 3.
> q y: 4.
> и получить при необходимости результат
> Transcript show: q result.
>
> Так?
>

да все имеено так, в части результата.
Но по поводу "получаем весь Class1 со всеми потрошками" это неправильный вывод.
От сообщения "Class1 new" Вы получаете как-раз именно экземпляр
класса. Другими словами это:
 - обьект, чей класс это Class1.

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

Class1 == Class1 new

Class1 == Class1 new class

Class1 class == Class1


> --
> --
> http://groups.google.ru/group/sugr
> ---
> Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk
> User Group.
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее
> сообщения, отправьте электронное письмо на адрес
> [hidden email].
> Настройки подписки и доставки писем:
> https://groups.google.com/groups/opt_out.
>
>



--
Best regards,
Igor Stasenko.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.

Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.



--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: Дурацкий вопрос

Nikolay Kleptsov
Рекомендую прочитать книгу "Объектно-Ориентированное программирование - язык Smalltalk" Ю.А.Кирютенко, В.А.Савельев https://docs.google.com/file/d/0B0TSQmHnUZ1PdTA2cVFlZm83ODQ/edit?usp=sharing
Также файл книги прикрепил к письму.
И все-таки на первых порах, лучше использовать готовые объекты. "Играя" с объектами, открыть системный браузер и смотреть как изнутри устроенны объекты. И только далее, когда станет ясная суть логики работы объектов в Smalltalk-системе, ничинать конструировать новые классы.
Полезна книга Pharo by Example. К нашему позору, до сих пор ее не перевели полностью.


20 мая 2013 г., 14:42 пользователь Nikolay Kleptsov <[hidden email]> написал:
Попробую зайти с другой стороны. Классы в Smalltalk являются объектами, только с небольшими дополнениями, а именно класс хранит поведение экземпляров и имена переменных и еще кое-что.
Создается экземпляр класса посылкой сообщения классу.
a := MyClass new.
Доступ к объекту можно получить через переменную, к которой он подсоединен. В данном случае это переменная а. Переменным хранят ссылки на объекты и только. Значение переменной можно изменить простым действием, например a := 40, a := b и т.д. После выполнения присваивания ссылка на объект изменяется. К переменной можно подсоединить любой объект даже класс.
Изменяя методы на стороне экземпляра . Можно изменить поведение всех объектов созданных от этого класса.
В примере описанных в предыдущих сообщениях. Лучше все делать в workspace.
Создаем объект экзепляр класса Class1.
a :=  Class1 new. Посылаем сообщение классу Class1>>new. В качестве ответа получаем объект экземпляр и присоединяем его к переменной а. Если вновь созданный объект не присоединить к переменной, то сообщение послать ему будет невозможно, будет отсутствовать ссылка. (Не получится дозвониться до человека по телефону, если нет его номера (ссылки), зная прекрасно что он существует или у него нет телефона, а он живет в другом городе). В отличии от строго типизованных языков типа С/С++ к переменной можно подсоединить любой объект, экземпляр любого класса.
Далее вновь созданному объекту посылаем сообщение
a x: 20. если метод существует он будет выполнен и переменной экземпляра х будет присоединен объект-число 20. Переменные объекта доступны только самому объекту, вне объекта они невидимы. Другим объектам видны только методы (но не переменные).
Важно не путать класс - хранилище методов или по другому его поведение и имена переменных с объектами в которых хранится текущее состояние объекта (объекты присоединенные к переменным экземпляра).
В классах хранится и другая информация (общие словари, переменные класса, категория и т.д.)
 


20 мая 2013 г., 4:08 пользователь Igor Stasenko <[hidden email]> написал:

2013/5/19 Genosse Alex <[hidden email]>:
> Всё, кажись прозрел! :) Ларчик просто открывался...
>
> Если мы создаём сообщением экземпляр класса  Class1  и присваиваем его некой
> переменной Class2.
> q:= Class1 new. То мы не просто присваиваем значение нового экземпляра
> класса  Class1, а получаем весь Class1 со всеми потрошками! Т.е. q теперь и
> есть  Class1 т.с. с исправленной фамилией в паспорте.
> Следовательно q можно, не торопясь, ступенчато передавать необходимые
> параметры.
> напр.
> q x: 3.
> q y: 4.
> и получить при необходимости результат
> Transcript show: q result.
>
> Так?
>

да все имеено так, в части результата.
Но по поводу "получаем весь Class1 со всеми потрошками" это неправильный вывод.
От сообщения "Class1 new" Вы получаете как-раз именно экземпляр
класса. Другими словами это:
 - обьект, чей класс это Class1.

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

Class1 == Class1 new

Class1 == Class1 new class

Class1 class == Class1


> --
> --
> http://groups.google.ru/group/sugr
> ---
> Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk
> User Group.
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее
> сообщения, отправьте электронное письмо на адрес
> [hidden email].
> Настройки подписки и доставки писем:
> https://groups.google.com/groups/opt_out.
>
>



--
Best regards,
Igor Stasenko.

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.

Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.




--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 

oop-Smalltalk.pdf (1M) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Дурацкий вопрос

Genosse

понедельник, 20 мая 2013 г., 18:12:11 UTC+4 пользователь Kleptsov Nikolay написал:
Рекомендую прочитать книгу "Объектно-Ориентированное программирование - язык Smalltalk" Ю.А.Кирютенко, В.А.Савельев https://docs.google.com/file/d/0B0TSQmHnUZ1PdTA2cVFlZm83ODQ/edit?usp=sharing
Также файл книги прикрепил к письму.
И все-таки на первых порах, лучше использовать готовые объекты. "Играя" с объектами, открыть системный браузер и смотреть как изнутри устроенны объекты. И только далее, когда станет ясная суть логики работы объектов в Smalltalk-системе, ничинать конструировать новые классы.
Полезна книга Pharo by Example. К нашему позору, до сих пор ее не перевели полностью.

Да, спасибо, уже есть. 
И PBE читал, большое спасибо всем, кто участвовал в ёе переводе. :)
И Smalltalk 80 "блю бук" в переводе видел... 
И тов. Лесневского ООП для начинающих читал...
И Ростовские лекции...
И Карпова "Введение в Смолток"
И DOS версию русского Smalltalk с примерами ставил.... 
И ещё по мелочам...

Короче если кому-то нужна литература на русском, обращайтесь, похоже за пару-тройку лет я собрал всё ;) 

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

В основном это выглядит так:
 "Всё объекты", "Доступ к объекту посредством сообщений", "Инкапсуляция, полиморфизм, наследование"
Затем сразу идёт речь о синтаксисе.
Первое понятно... Второе можно запомнить... НО посредине дырка!  ):

Сама методология для меня осталась непонятной... Может те, кто учился хоть сколько-то программированию просто уже подкоркой её чуют... Но мне она из книг совсем не очевидна, как будто папуасу дали краски, кисть, показали картину и сказали рисуй, не объяснив даже перспективу и цветовой круг...

Я не хаю литературу, Слава богу она хоть есть! :)
Просто живописую суть моей проблемы.

По сему задолбавшись тупо повторять примеры из книжек (они если повторять всегда получаются;) решил написать какую нибудь ерундовину самостоятельно.
Ну и разумеется тут же получил "разрыв шаблона".
Благо, спасибо за помощь, куски мозаики уже начали скрадываться во что-то более осмысленное...
И я даже успешно закончил пробное приложение, какое писал! :)
Оно наверно с сильным душком, но работает! )))
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: Дурацкий вопрос

Genosse
В обще говоря, с книгами по ООП (и не только относительно смолтока) занятная картинка.
С одной стороны, как правило, красной нитью через них проходит, что надо ломать привычки и парадигмы процедурного программирования...
А с другой стороны, они написаны так, что видно - рассчитаны они на читателя уже вполне освоившегося в ентом процедурном программировании.
Т.е. наша книга по ООП есть суть этакий «лэвил ту», «курс переподготовки, повышения квалификации»....
Книг по ООП которые бы были нацелены на тех, кому собственно нечего ломать как-то не встречал...
 
Если позволите, образное сравнение:
Вы не видели никогда карт.
Некто, добрая душа, в своей книге желает обучить Вас игре в покер.
Сначала немного истории и покерных традиций.
Затем основные парадигмы: «Покер это теория вероятности», «Это математический расчёт не одной а серии игр», «Психология, чтение противника».
И большую часть книги идёт собственно описание т. вероятности, приводятся эмпирические стат  данные по шансам карманных пар, вероятность прикупа на ривере, шансы к банку и т.д.
И вот автор говорит Вам - «Играйте! Пораскладывайте карты, посмотрите как выстраиваются «руки» и Вы несомненно сможете играть или... Или иначе Вы полный идиот!».
 
НО... Но он совершено не учитывает, что карты Вы раньше не видели! А он почему-то правила не рассказал, видимо это достаточно тривиальная, сама собой разумеющаяся вещь...
 
И вот, Вы, как дурак смотрите на карты: «Ну ладно баба одна... вероятно это дама... А мужика- то два! Кто из них король?.» 
Вы смутно вспоминает, что в карточных играх, вроде есть козыри... «А здесь как? Могу ли я назначить козырную масть? Будет ли работать такой подход?».
 
И вот вроде почти всё вам ясно с шансами к банку, пусть не очень помните вероятность собрать флеш на ривере, но это не беда, в перерыве освежите воспоминания... А вот играть то как?!
От партнёров по столу получаете ошибку за ошибкой, то не всвой черёд сходили, то Ваш меседж нот андестенд, а то рука Ваша не рука, а полный ниль...
И это Вы ещё не догадываетесь, можете играть не просто в покер, а в холдем, омаху, или какой нибудь 7-карточный стад....
 
Вот что мне напоминает прочитанная литература по ООП ;) 😉
 
PS:В университете, в аспирантуре занимался термодинамической моделью роста растений с многоэтажными формулами и химией с3 с4 путей фотосинтеза.. и вот как то попроще это всё шло.... Что то ускальзает от внимания,
 
Видимо, это то, что обычно, передаётся чисто вербальным путём, через вопросы лектору и его разъяснения вопрошавшему...
Жаль только курсов по Смолтоку в Питере нет..  

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: Дурацкий вопрос

Nikolay Kleptsov
Мое первое знакомство со Smalltalk произошло на сайте smalltalk.ru. Проблем с усвоением не возникало, только были небольшие неясности с блоками. Хотя к этому моменту времени имел опыт программирования на java, basic, pascal, немного с/с++ и assembler,
Книги оказали неоценимую помощь в усвоении. Для системы Smalltalk/X существует отличное онлайн руководство по изучению и освоению яз. программирования, к сожалению оно на английском.
Можно рассмотреть пример более приближенный к жизни, вместо абстрактных. И пройти все этапы создания.


21 мая 2013 г., 4:05 пользователь Genosse Alex <[hidden email]> написал:
В обще говоря, с книгами по ООП (и не только относительно смолтока) занятная картинка.
С одной стороны, как правило, красной нитью через них проходит, что надо ломать привычки и парадигмы процедурного программирования...
А с другой стороны, они написаны так, что видно - рассчитаны они на читателя уже вполне освоившегося в ентом процедурном программировании.
Т.е. наша книга по ООП есть суть этакий «лэвил ту», «курс переподготовки, повышения квалификации»....
Книг по ООП которые бы были нацелены на тех, кому собственно нечего ломать как-то не встречал...
 
Если позволите, образное сравнение:
Вы не видели никогда карт.
Некто, добрая душа, в своей книге желает обучить Вас игре в покер.
Сначала немного истории и покерных традиций.
Затем основные парадигмы: «Покер это теория вероятности», «Это математический расчёт не одной а серии игр», «Психология, чтение противника».
И большую часть книги идёт собственно описание т. вероятности, приводятся эмпирические стат  данные по шансам карманных пар, вероятность прикупа на ривере, шансы к банку и т.д.
И вот автор говорит Вам - «Играйте! Пораскладывайте карты, посмотрите как выстраиваются «руки» и Вы несомненно сможете играть или... Или иначе Вы полный идиот!».
 
НО... Но он совершено не учитывает, что карты Вы раньше не видели! А он почему-то правила не рассказал, видимо это достаточно тривиальная, сама собой разумеющаяся вещь...
 
И вот, Вы, как дурак смотрите на карты: «Ну ладно баба одна... вероятно это дама... А мужика- то два! Кто из них король?.» 
Вы смутно вспоминает, что в карточных играх, вроде есть козыри... «А здесь как? Могу ли я назначить козырную масть? Будет ли работать такой подход?».
 
И вот вроде почти всё вам ясно с шансами к банку, пусть не очень помните вероятность собрать флеш на ривере, но это не беда, в перерыве освежите воспоминания... А вот играть то как?!
От партнёров по столу получаете ошибку за ошибкой, то не всвой черёд сходили, то Ваш меседж нот андестенд, а то рука Ваша не рука, а полный ниль...
И это Вы ещё не догадываетесь, можете играть не просто в покер, а в холдем, омаху, или какой нибудь 7-карточный стад....
 
Вот что мне напоминает прочитанная литература по ООП ;) 😉
 
PS:В университете, в аспирантуре занимался термодинамической моделью роста растений с многоэтажными формулами и химией с3 с4 путей фотосинтеза.. и вот как то попроще это всё шло.... Что то ускальзает от внимания,
 
Видимо, это то, что обычно, передаётся чисто вербальным путём, через вопросы лектору и его разъяснения вопрошавшему...
Жаль только курсов по Смолтоку в Питере нет..  

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: Дурацкий вопрос

Genosse
Да в сущности не обращайте внимание.. 
Это я вчера ночью, что называется в душевном порыве выдал в порядке бреда :)
(к часу ночи опять зашёл в тупик, как подозреваю на ровном месте) 

--
--
http://groups.google.ru/group/sugr
---
Вы получили это сообщение, поскольку подписаны на группу Russian Smalltalk User Group.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес [hidden email].
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.
 
 
Reply | Threaded
Open this post in threaded view
|

Re: Дурацкий вопрос

vmusulainen-2
CONTENTS DELETED
The author has deleted this message.
12