Re[17]: Языковые войны: языки для обучения
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.03.05 16:39
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:



ANS>Приведи пример такого класса.


Например http://gzip.rsdn.ru/article/alg/tlsd.xml
Автор(ы): Сергей Смирнов (Serginio1)
Дата: 14.08.2004
Пример реализации двухуровневого массива с помощью нового средства С# — generics. Сравнение производительности различных реализаций сортированных списков.

в Б+ деревьях есть два класса отвечающих за уровни
один за самый нижний другой за верхние.
Все базирутся от
LevelBase<K, V> который является абстрактным классом

        namespace RSDN.Collections
{
    /// <summary>
    /// Summary description for LevelBase.
    /// </summary>
    internal abstract class LevelBase<K, V>
    {
        public int _levelNum;
        public BPlusTree<K, V> _bPlusTree;
        public int _index;
        public NodeLevel<K, V> _parent;

        public abstract void First();
        public abstract void Last();
        public abstract void GetFirstElem();
        public abstract void GetLastElem();
        public abstract bool NavigateKey(K key);
        public abstract bool NavigateKeyFromParent(K key, PageBase page);
        public abstract bool NavigateOrInsertDefault(K key);

        public int LevelNum { get { return _levelNum; } }

        public abstract void SetPage(PageBase page);
    }
}


Понятно, что LeafLevel и NodePage никогда перекрываться не будут,
(PageBase тоже абстрактный класс, так как на уровнях разные страницы)
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
Re[17]: Языковые войны: языки для обучения
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.03.05 16:41
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Serginio1 пишет:

>> ANS>отменять наследование?..
>>
>> Логикой проектирования класса. Там где не нужно перекрытие. Таких
>> классов очень много, базирующихся на определенном кастомном, в котором

ANS>Приведи пример такого класса.


Тот же FileStream, (а так же типизированные делегаты, массивы итд.)
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
Re[18]: Языковые войны: языки для обучения
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 16.03.05 12:37
Оценка:
Serginio1 пишет:
>> > ANS>отменять наследование?..
>> >
>> > Логикой проектирования класса. Там где не нужно перекрытие. Таких
>> > классов очень много, базирующихся на определенном кастомном, в котором
>
> ANS>Приведи пример такого класса.
>
> Тот же FileStream, (а так же типизированные делегаты, массивы итд.)

За делегатов не скажу, а в переопределении потоков и массивов криминала
нет. В ST это распространённая практика.

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[19]: Языковые войны: языки для обучения
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.03.05 13:20
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:


>> ANS>Приведи пример такого класса.

>>
>> Тот же FileStream, (а так же типизированные делегаты, массивы итд.)
По поводу массивов, то для них нужно назначить только тип ( и соответственно длину). И соответственно все методы доступа инлайнятся.
По поводу FileStream и более экзотичных стримов методы Read и write это имеет какой либо смысл.
Опять же не охота ввязываться в спор, есть достаточно много своих личных конечных классов, где по личному мнению не нужно перекрытие, и если по какой то причине это нужно всегда легко снять эти ограничения.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
Re[11]: Языковые войны: языки для обучения
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.03.05 23:23
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Хотя бы потому, что просто написав программу на том же Smalltalk будет

ANS>задействована большая часть того, что называется "патерны". Имхо, этого
ANS>достаточно.

Нда, логика ниже плинтуса. Концепции они и в африке концепции. А паттерны их нужно или узучать отедьно или вообще от них абстрагироваться.

ANS>Ну и второй аргумент — чистота. "Любить — так любить, гулять — так

ANS>гулять". Допустим изучение ООП. Изучать нужно не отвлекаясь на то, что
ANS>можно доступ к членам класса напрямую получить, на всякие там
ANS>модификаторы доступа, виртуальные/невиртуальные функции, final/sealed.
ANS>Или ты и с этим не согласен?

Ну, а я считаю, что такая чистота — это и есть грязь. И если бы это было не так, то все бы в промышленном производстве софта использовали бы именно Смолток, а не Яву и Шарп.

ANS>Кстати, какая польза от sealed?


Запред на наследование от некоторого класса. Если по прикладной логики у класса не должно быть наследников, то ты это выражашь.

>> хуже в Яве, C#, Хаскеле, Скале какой нибудь и т.п.


ANS>Так ты таки предлагаешь учить с начала хаскель/скалу?


Скала слишком сложно для начала. Хаскель можно как представителя ФЯ. Но уж ООП точно начинаь учить нужно на Яве или Шарпе. И уж после освоения можно для расширения кругозора дать Скалу и Смолток.

Мне просто забавляет логика по которой Шарп с Явой вообще учить нельзя, а Смолток нужно.
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Языковые войны: языки для обучения
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 17.03.05 07:53
Оценка: +1
VladD2 пишет:
> ANS>Хотя бы потому, что просто написав программу на том же Smalltalk будет
> ANS>задействована большая часть того, что называется "патерны". Имхо, этого
> ANS>достаточно.
>
> Нда, логика ниже плинтуса. Концепции они и в африке концепции. А

Так с концепциями там тоже фиговенько. Той же посылки сообщений в
"псевдо-оо" как не было так и нет. А всё туда же — ОО обучать.

> паттерны их нужно или узучать отедьно или вообще от них абстрагироваться.


Так как же ты от них абстрагируешся если на каждом шаге их нужно
применять явно?

> ANS>Ну и второй аргумент — чистота. "Любить — так любить, гулять — так

> ANS>гулять". Допустим изучение ООП. Изучать нужно не отвлекаясь на то, что
> ANS>можно доступ к членам класса напрямую получить, на всякие там
> ANS>модификаторы доступа, виртуальные/невиртуальные функции, final/sealed.
> ANS>Или ты и с этим не согласен?
>
> Ну, а я считаю, что такая чистота — это и есть грязь. И если бы это было

Да-да-да. Попробую объяснить медленнее. модификаторы доступа,
невиртуальные функции, sealed классы не имеют отношения к ОО. Как ты их
будеш использовать для обучения ОО.

> не так, то все бы в промышленном производстве софта использовали бы

> именно Смолток, а не Яву и Шарп.
>
> ANS>Кстати, какая польза от sealed?
>
> Запред на наследование от некоторого класса. Если по прикладной логики у
> класса не должно быть наследников, то ты это выражашь.

А какая польза от запрета наследования?

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[13]: Языковые войны: языки для обучения
От: Cyberax Марс  
Дата: 17.03.05 09:23
Оценка:
Andrei N.Sobchuck пишет:

>> Запред на наследование от некоторого класса. Если по прикладной логики у

>> класса не должно быть наследников, то ты это выражашь.
> А какая польза от запрета наследования?

Гарантируемая иммутабельность объектов.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[14]: Языковые войны: языки для обучения
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 17.03.05 09:39
Оценка:
Cyberax пишет:
>> > Запред на наследование от некоторого класса. Если по прикладной логики у
>> > класса не должно быть наследников, то ты это выражашь.
>> А какая польза от запрета наследования?
>
> Гарантируемая иммутабельность объектов.

Про это я помню
Думается мне, это решаемо введением соответсвующего модификатора и
проверкой на этапе компиляции. Не нужно ограничивать наследование.

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[15]: Языковые войны: языки для обучения
От: Cyberax Марс  
Дата: 17.03.05 10:08
Оценка:
Andrei N.Sobchuck пишет:

>

>
>
>
>> Гарантируемая иммутабельность объектов.
> Про это я помню
> Думается мне, это решаемо введением соответсвующего модификатора и
> проверкой на этапе компиляции. Не нужно ограничивать наследование.

public class A1
{
    final int val=1;
    int getVal() {return val;};
};
public class A2 extends A1
{
    int getVal(){return Math.rand();}; //Hehe
};

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

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[16]: Языковые войны: языки для обучения
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.03.05 10:14
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>
C>public class A1
C>{
C>    final int val=1;
C>    int getVal() {return val;};
C>};
C>public class A2 extends A1
C>{
C>    int getVal(){return Math.rand();}; //Hehe
C>};
C>

C>То есть с помощью наследования можно нарушить иммутабельность. Проверить
C>на этапе компиляции это невозможно, так как класс A2 может быть,
C>например, загружен из сети во время работы приложения.

А что мешает сделать getVal final?
Re[17]: Языковые войны: языки для обучения
От: Cyberax Марс  
Дата: 17.03.05 10:16
Оценка:
Курилка пишет:

>

>C>public class A1
>C>{
>C> final int val=1;
>C> int getVal() {return val;};
>C>};
>C>public class A2 extends A1
>C>{
>C> int getVal(){return Math.rand();}; //Hehe
>C>};
>C>
>
>
> C>То есть с помощью наследования можно нарушить иммутабельность.
> Проверить
> C>на этапе компиляции это невозможно, так как класс A2 может быть,
> C>например, загружен из сети во время работы приложения.
> А что мешает сделать getVal final?

Тогда ее наследовать нельзя будет, в чем собственно и был вопрос.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[18]: Языковые войны: языки для обучения
От: Курилка Россия http://kirya.narod.ru/
Дата: 17.03.05 10:28
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Тогда ее наследовать нельзя будет, в чем собственно и был вопрос.


Т.е. вопрос получается — имеет ли смысл запрещать наследование класса целиком, или только опр. части его, жаба даёт оба варианта и выбор за программером
Re[19]: Языковые войны: языки для обучения
От: Cyberax Марс  
Дата: 17.03.05 10:53
Оценка: +2
Курилка пишет:

> C>Тогда ее наследовать нельзя будет, в чем собственно и был вопрос.

> Т.е. вопрос получается — имеет ли смысл запрещать наследование класса
> целиком, или только опр. части его, жаба даёт оба варианта и выбор за
> программером

Да, причем запрет наследования всего класса можно считать просто как
сокращение, чтобы не писать final перед каждым членом класса.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[13]: Языковые войны: языки для обучения
От: prVovik Россия  
Дата: 17.03.05 20:18
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:


ANS>модификаторы доступа, ..., не имеют отношения к ОО.

А что, инкапсуляция тоже не имеет отношение к ОО?
Учитывая, что модификаторы доступа — это есть механизм управления инкапсуляцией...
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[13]: Языковые войны: языки для обучения
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.03.05 00:47
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Так с концепциями там тоже фиговенько. Той же посылки сообщений в

ANS>"псевдо-оо" как не было так и нет. А всё туда же — ОО обучать.

Да нет необходимости для ООП эмулировать поведение Смолтока. Вызов методов — это та же послыка сообщений.

ANS>Так как же ты от них абстрагируешся если на каждом шаге их нужно

ANS>применять явно?

А так и асбрагируешся. Они в язык вмонтированы. Ненапряжно изучашь себе языки и за одно преобщаешся к паттернам. Потом когда начнешь их проходить явно (жаль что скорее всего уже не в инстуитуте), то останется только уточнить понятия и закрепить материал.

ANS>Да-да-да. Попробую объяснить медленнее. модификаторы доступа,

ANS>невиртуальные функции, sealed классы не имеют отношения к ОО. Как ты их будеш использовать для обучения ОО.

ОО — это в первую очередь принцип инкапсуляции логики и данных в объектах. Так как это достигается действительно дело десятое. И модификаторы доступа — это всего лишь удобное и простое решение задачи. Однако они не чем не хуже, а на мой взгляд лучше, чем другие решения.

ANS>А какая польза от запрета наследования?


В каждом случае разная. Где-то защита инкапсуляции. Где-то предотвращения неверного дизайна иерархии классов. Где-то оптимизация (хотя на сегодня от этого толку 0).
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Языковые войны: языки для обучения
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.03.05 00:47
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Да, причем запрет наследования всего класса можно считать просто как

C>сокращение, чтобы не писать final перед каждым членом класса.

Именно. Но изменение неизменяемого объекта — это всего лишь частичный случай нарушения инкапсуляции от которого и позволяют застраховаться средства вроде final/sealed. Если использовать их с умом, то в больших проектах можно сэкономить кучу сил и времени.

Врочем в целях обучения, на первых порах можно опускать эти тонкости. Шапри и Ява тем и хороши, что их расширенные средства не обязательны. Начать писать приложения можно на очень ограниченном поднаборе средств языка. А потом увиличивать свои возможности за счет освоения более высокоуровневых и сложных вешей.
... << RSDN@Home 1.1.4 beta 4 rev. 359>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Языковые войны: языки для обучения
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 18.03.05 16:06
Оценка: +2 -1 :)
prVovik пишет:
> ANS>*модификаторы доступа*, ..., не имеют отношения к ОО.
> А что, инкапсуляция тоже не имеет отношение к ОО?
> Учитывая, что модификаторы доступа — это есть механизм управления
> инкапсуляцией...

Ага, выходит так: Smalltalk — нет модификаторов, совсем не ОО;
С++ — 3 модификатора, чуть-чуть ОО; Java — поболее модификаторов, значит
более ОО, чем С++; и С# — еще больше модификаторов, ну полный ОО.

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.