Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
..ну десятки я канеш загнул. но 10 лет точно.
22 июл 19, 18:13    [21932008]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
andreykaT
mayton
пропущено...

Да можно прорабоатать десятки лет в разработке конкурирующего ПО но так и не наступить на
ту ситуацию которую нарисовали в философской задаче. Хм.. как вариант кольцевой список ресурсов.
Но тоже.. редкость такая. В реальности коллекции ресурсов обычно имеют голову и хвост и поэтому
такой проблемы не бывает.

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

Можно акторы кодить 10 лет. Нормальный кейс? Да.
22 июл 19, 18:20    [21932017]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
andreykaT
пропущено...

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

Можно акторы кодить 10 лет. Нормальный кейс? Да.


Кодить можно. Если ты что то не используешь - это не твоя вина, но твоя проблема. Другие используют и имеют конкурентное преимущество, вот и все. Глупо обижаться на препода за то что он спрашивает то о чем ты не знаешь:)
22 июл 19, 18:34    [21932027]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
забыл ник
mayton
пропущено...

Можно акторы кодить 10 лет. Нормальный кейс? Да.


Кодить можно. Если ты что то не используешь - это не твоя вина, но твоя проблема. Другие используют и имеют конкурентное преимущество, вот и все. Глупо обижаться на препода за то что он спрашивает то о чем ты не знаешь:)

Если мы имеем в виду задачу о философах - то это задача на "десерт". Или на сладкое.
Серъезно если собеседовать человека на проект? Нужно ли вообще его про это спрашивать.
Можно спросить в конце. Но не делать это фактором который определяет проф-пригодность
специалиста вообще.

P.S. - Карла Маркса знаете?
- Знаю. Дальше.
22 июл 19, 18:44    [21932036]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
andreykaT
mayton
пропущено...

Кстати да. Типизация тоже в Java существует но не так ярко выражена. Нет такой математичной строгости
как в Scala или Haskell.

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

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

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

по тайпклассам курил вот это:

https://scalac.io/typeclasses-in-scala/

кстати там как раз и ссылаются на адхок подлиморфизм.


Дженерики мне тоже тяжело заходили, из-за контраваринатности. Пока не разжевал сам себе пример с Function[-A, +B] и вдруг все стало ясно, понятно и очевидно. И кстати намного более интуитивнее чем в Java.

Ad-hoc и typeclasses это отдельный огромный пласт, без которого имплементацию ФП в скале просто не понять. Понятие идет иреративно, я пару раз думал что понял их, а потом мне открывался более глубинный смысл, примерно как с монадами. Но теперь если смотреть с позиции опыта - ничего там нету страшного и тяжелого. Typeclass - в классическом понимании описание capabilities которыми обладает класс, допустим нам надо ввести понятие эквивалентности
1) Мы делаем интерфейс\trait Equal[A] с методом equals(a1:A, a2:A):Bollean
2) Допустим нам в тесте надо проверять объекты на эквивалентность, мы пишем метод isSame[A:Equal](a1:A, a2:A):Boolean = a1.equal(a2) -------- этот код компилируется только если мы вызовем isSame на объектах, которые имеют capability Equal
3) допустим у нас есть case class User(name), в Java нам надо было бы делать так class User extends Equal, или вводить метод equals в класс Object с тайпклассами мы можем сделать пункт 4
4) implicit val userEquals = new Equal[User]{ def equals(u1:User, u2:User) = u1.name == u2.name}
5) теперь isSame(User("a"), User("b")) скопилируется а isSame(Profile(a), Profile(b)) --- нет
6) Таким образом мы расширили функционал, не притрагиваясь к изначальному коду User и не засирая его методами, ортогональными к понятию User.
7) А теперь представь сколько багов можно было словить во время компиляцияя если бы методы equals hashcode и тд не были бы обьявлены в Object
22 июл 19, 18:46    [21932038]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
забыл ник
пропущено...


Кодить можно. Если ты что то не используешь - это не твоя вина, но твоя проблема. Другие используют и имеют конкурентное преимущество, вот и все. Глупо обижаться на препода за то что он спрашивает то о чем ты не знаешь:)

Если мы имеем в виду задачу о философах - то это задача на "десерт". Или на сладкое.
Серъезно если собеседовать человека на проект? Нужно ли вообще его про это спрашивать.
Можно спросить в конце. Но не делать это фактором который определяет проф-пригодность
специалиста вообще.

P.S. - Карла Маркса знаете?
- Знаю. Дальше.


Ну тут конечно согласен. Такую задачу в принципе спрашивать не стоит, если только не собеседование в крутую контору помешанную на многопоточности. Но вот если кандидат скажет - а ну тут надо решать как в классическом решении задачи о философах - это ему огромный плюс в карму и следующий вопрос скорее всего снимается
22 июл 19, 18:48    [21932040]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
забыл ник
mayton
пропущено...

Можно акторы кодить 10 лет. Нормальный кейс? Да.


Кодить можно. Если ты что то не используешь - это не твоя вина, но твоя проблема. Другие используют и имеют конкурентное преимущество, вот и все. Глупо обижаться на препода за то что он спрашивает то о чем ты не знаешь:)

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

вот сколько раз и где меня ни спрашивали всю эту конкурентную дичь из книжки канкарренси ин практиз по факту НИГДЕ это не было нужно.

ну да понятие иметь надо я согласен чтоб уж совсем не антипаттернить. а на практике применять - ноль. НООООООЛЬ.

может мне с местами не везло. а может наоборот.

а вспомнил многопоточку....
...был как то код на проекте где экзекутор пораждал пачку экзекуторов которые выстреливали каждый еще одной пачкой и там короче треды крутились. такой фейерверк многопоточки по триггеру бабах. )))...
и это всё было на спринге и с хибером и вообще ааааааааааа. (тут выстрел из ружья в голову тому кто это сделал)
22 июл 19, 19:09    [21932049]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
..а щас мы едем на еще один левел ап:
.... серверлесс... и где там ваша хваленая многопоточка с парикмахерами и прочими персонажами?
22 июл 19, 19:22    [21932056]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
забыл ник
andreykaT
пропущено...

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

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

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

по тайпклассам курил вот это:

https://scalac.io/typeclasses-in-scala/

кстати там как раз и ссылаются на адхок подлиморфизм.


Дженерики мне тоже тяжело заходили, из-за контраваринатности. Пока не разжевал сам себе пример с Function[-A, +B] и вдруг все стало ясно, понятно и очевидно. И кстати намного более интуитивнее чем в Java.

Ad-hoc и typeclasses это отдельный огромный пласт, без которого имплементацию ФП в скале просто не понять. Понятие идет иреративно, я пару раз думал что понял их, а потом мне открывался более глубинный смысл, примерно как с монадами. Но теперь если смотреть с позиции опыта - ничего там нету страшного и тяжелого. Typeclass - в классическом понимании описание capabilities которыми обладает класс, допустим нам надо ввести понятие эквивалентности
1) Мы делаем интерфейс\trait Equal[A] с методом equals(a1:A, a2:A):Bollean
2) Допустим нам в тесте надо проверять объекты на эквивалентность, мы пишем метод isSame[A:Equal](a1:A, a2:A):Boolean = a1.equal(a2) -------- этот код компилируется только если мы вызовем isSame на объектах, которые имеют capability Equal
3) допустим у нас есть case class User(name), в Java нам надо было бы делать так class User extends Equal, или вводить метод equals в класс Object с тайпклассами мы можем сделать пункт 4
4) implicit val userEquals = new Equal[User]{ def equals(u1:User, u2:User) = u1.name == u2.name}
5) теперь isSame(User("a"), User("b")) скопилируется а isSame(Profile(a), Profile(b)) --- нет
6) Таким образом мы расширили функционал, не притрагиваясь к изначальному коду User и не засирая его методами, ортогональными к понятию User.
7) А теперь представь сколько багов можно было словить во время компиляцияя если бы методы equals hashcode и тд не были бы обьявлены в Object

ты прям крут. я серьезно. вот скажи мне, сколько времени у тебя ушло на осознание этого от начала знакомства с функциональщиной чуть глубже чем с нуля?
22 июл 19, 19:23    [21932057]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
andreykaT
ты прям крут. я серьезно. вот скажи мне, сколько времени у тебя ушло на осознание этого от начала знакомства с функциональщиной чуть глубже чем с нуля?

Сложно сказать, я скалу стал смотреть лет 8 назад, но тогда вообще не понял функциональщины. Потом еще были подходы через пару лет. Ну а года 3 назад проект новый нарисовался на спарке и скале, решил туда запрыгнуть, потому как скалу вообще никто не знал. Где-то месяцев 8 я читал статьи про ФП на скала и понимал только введение:) Потом прочитал Functional Programming in scala и Functional and Reactive Domain Modeling - первая просто люто полезная книжка, но не надейся ограничиться только чтением - там надо делать упражнения тоже, вот там и научишься. Вторая книга - ФП проект в реалворлд. Еще полгода и я читал статьи уже до выводов, иногда пропукая куски хаскелл - кода. ну а еще через полгода я попробовал провести тренинг внутри компании, и вот там уже сложилось - при попытках обьяснить что такое flatMap, пришлось самому осознать это.
Ну если сложить то нужные книги + проект на скале + полтора года - думаю выйти на хороший уровень реально
22 июл 19, 19:57    [21932071]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
ту вторую книжку по скале совсем недавно по случаю на озоне купил правда на русском зато дешево.
проект на скале есть, скоро год будет как я с ним вожусь, но он ну как сказать во первых за меня его начали, во-вторых, он довольно простой из разряда взял джейсон -пложил джейсон, таким проектом вон надо асв78 заниматься. ему будет интересно. а где там мысли развернуться я лично хезе. ))
22 июл 19, 21:41    [21932141]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
andreykaT
..а щас мы едем на еще один левел ап:
.... серверлесс... и где там ваша хваленая многопоточка с парикмахерами и прочими персонажами?

А серверлесс чей? Амазонский? Гуглячий?
22 июл 19, 23:42    [21932207]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
Амазоновский пусть будет. С гуглом не знаком
23 июл 19, 00:04    [21932222]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
pgm300
Member

Откуда:
Сообщений: 78
Создать объект как Calculator cal = new My_Calculator() можно, но это должно преследовать какую то цель. Разница с Calculator cal = new Calculator() конечно есть. Как минимум
1. Как уже писали, будет больше накладных расходов при создании объекта extended класса. В данном случае разница не такая большая, а если бы вам вздумалось хранить в объекте My_Calculator несколько массивов на 100 элементов для какой нибудь истории операций?
2. Объект cal будет иметь ссылку типа Calculator, но сам объект при этом будет типа My_Calculator, и вести себя как My_Calculator. Т.е. вызвать у cal дополнительные методы My_Calculator вы не сможете, у вас область видимости ограничена Calculator. Т.е. умножение вызвать не получится.
3. из п.2 следует, что если в My_Calculator будут переопределены методы базового класса (например метод addition будет выводить на экран надпись "Hello"), то при вызове cal.addition вы получите этот самый Hello. Это может ввести в заблуждение либо вас, либо вашего коллегу, который возможно будет ждать от объекта cal базового поведения не заметив/забыв что у вас там объект extended класса. В данном случае переопределения нет, но ведь это всегда может произойти.
4. наверняка есть что то еще, пп 1 - 3 это первое, что приходит в голову.

Исходя из пп 1-4 возникает вопрос - зачем так надо делать?
Должны быть какие то причины.

Простая аналогия. Представьте что у вас есть телевизор А (простой телевизор), с функцией 1 - "показать кино" и extended телевизор Б (телевизор для домохозяек). В телевизоре Б функция 1 переопределена на "показать шоу Малахова" и добавлена функция 2 - "показать Дом2". Вы даете человеку телевизор Б (по каким то причинам у вас есть именно он, а не простой телевизор), но не хотите, чтобы он совсем сошел с ума и даете ему пульт от телевизора А на котором всего 1 кнопка. Соответственно "Дом - 2" он включить не сможет (кнопки нет!). Но вместо кино ему придется смотреть шоу Малахова.
Телевизор в данном случае - это объект класса "телевизор для домохозяек" а пульт - это ссылка типа "простой телевизор".

Аналогия довольна топорная, первое что пришло в голову.

Есть возможность привести ссылку Calculator к типу My_Calculator но это уже другая история..
23 июл 19, 03:14    [21932264]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Java Ответить