powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
14 сообщений из 64, страница 3 из 3
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840116
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..ну десятки я канеш загнул. но 10 лет точно.
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840122
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTmaytonпропущено...

Да можно прорабоатать десятки лет в разработке конкурирующего ПО но так и не наступить на
ту ситуацию которую нарисовали в философской задаче. Хм.. как вариант кольцевой список ресурсов.
Но тоже.. редкость такая. В реальности коллекции ресурсов обычно имеют голову и хвост и поэтому
такой проблемы не бывает.
а можно десятки лет проработать и не заниматься конкурирующим ПО в принципе. ну или на грани - делаем всё иммутабельным и идите вы в пень со своими локами и шаред ресурсами.
Можно акторы кодить 10 лет. Нормальный кейс? Да.
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840129
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonandreykaTпропущено...

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

Кодить можно. Если ты что то не используешь - это не твоя вина, но твоя проблема. Другие используют и имеют конкурентное преимущество, вот и все. Глупо обижаться на препода за то что он спрашивает то о чем ты не знаешь:)
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840135
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никmaytonпропущено...

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

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

P.S. - Карла Маркса знаете?
- Знаю. Дальше.
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840136
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTmaytonпропущено...

Кстати да. Типизация тоже в 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
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840138
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonзабыл никпропущено...


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

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

Ну тут конечно согласен. Такую задачу в принципе спрашивать не стоит, если только не собеседование в крутую контору помешанную на многопоточности. Но вот если кандидат скажет - а ну тут надо решать как в классическом решении задачи о философах - это ему огромный плюс в карму и следующий вопрос скорее всего снимается
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840144
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никmaytonпропущено...

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

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

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

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

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

а вспомнил многопоточку....
...был как то код на проекте где экзекутор пораждал пачку экзекуторов которые выстреливали каждый еще одной пачкой и там короче треды крутились. такой фейерверк многопоточки по триггеру бабах. )))...
и это всё было на спринге и с хибером и вообще ааааааааааа. (тут выстрел из ружья в голову тому кто это сделал)
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840151
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..а щас мы едем на еще один левел ап:
.... серверлесс... и где там ваша хваленая многопоточка с парикмахерами и прочими персонажами?
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840152
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник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
ты прям крут. я серьезно. вот скажи мне, сколько времени у тебя ушло на осознание этого от начала знакомства с функциональщиной чуть глубже чем с нуля?
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840164
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTты прям крут. я серьезно. вот скажи мне, сколько времени у тебя ушло на осознание этого от начала знакомства с функциональщиной чуть глубже чем с нуля?
Сложно сказать, я скалу стал смотреть лет 8 назад, но тогда вообще не понял функциональщины. Потом еще были подходы через пару лет. Ну а года 3 назад проект новый нарисовался на спарке и скале, решил туда запрыгнуть, потому как скалу вообще никто не знал. Где-то месяцев 8 я читал статьи про ФП на скала и понимал только введение:) Потом прочитал Functional Programming in scala и Functional and Reactive Domain Modeling - первая просто люто полезная книжка, но не надейся ограничиться только чтением - там надо делать упражнения тоже, вот там и научишься. Вторая книга - ФП проект в реалворлд. Еще полгода и я читал статьи уже до выводов, иногда пропукая куски хаскелл - кода. ну а еще через полгода я попробовал провести тренинг внутри компании, и вот там уже сложилось - при попытках обьяснить что такое flatMap, пришлось самому осознать это.
Ну если сложить то нужные книги + проект на скале + полтора года - думаю выйти на хороший уровень реально
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840222
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ту вторую книжку по скале совсем недавно по случаю на озоне купил правда на русском зато дешево.
проект на скале есть, скоро год будет как я с ним вожусь, но он ну как сказать во первых за меня его начали, во-вторых, он довольно простой из разряда взял джейсон -пложил джейсон, таким проектом вон надо асв78 заниматься. ему будет интересно. а где там мысли развернуться я лично хезе. ))
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840266
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT..а щас мы едем на еще один левел ап:
.... серверлесс... и где там ваша хваленая многопоточка с парикмахерами и прочими персонажами?
А серверлесс чей? Амазонский? Гуглячий?
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840267
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Амазоновский пусть будет. С гуглом не знаком
...
Рейтинг: 0 / 0
Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
    #39840280
pgm300
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создать объект как 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 но это уже другая история..
...
Рейтинг: 0 / 0
14 сообщений из 64, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]