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

Откуда:
Сообщений: 32
Есть 2 класса. Calculator и My_Calculator, меня интересует, какая разница во 2 классе, если бы вместо этой инструкции Calculator cal = new My_Calculator();
была бы эта инструкция: Calculator cal = new Calculator ();
Разницы же никакой, и на мой взгляд проще будет этот вариант
Calculator cal = new Calculator ();
или для кого что удобнее? сталкивался с вопросами на собеседовании, но разницы никакой не вижу.




//класс 1
class Calculator {
int c;

public void addition(int a, int b) {
c = a + b;
System.out.println("Сумма чисел: " + c);
}

public void subtraction(int a, int b) {
c = a - b;
System.out.println("Разность чисел: " + c);
}
}

//класс 2
public class My_Calculator extends Calculator{
public void multiplication(int a, int b) {
c = a * b;
System.out.println("Произведение чисел: " + c);
}

public static void main(String args[]) {
int a = 10, b = 20;
Calculator cal = new My_Calculator();
cal.addition(a, b);
cal.subtraction(a, b);
}
}
20 июл 19, 21:33    [21931009]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

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

Откуда: Bay Area, CA
Сообщений: 1973
andreykaT
У тебя в май калькуляторе могут быть пере определены методы тогда объект класса калькулятор будет вести себя иначе чем если ты его инстанциируешь через нью калькулятор


Так как на практике это часто случается, но входит в противоречие с базовым принципом ООП сформулированного Барбарой Лисковой

Роберт С. Мартин определил[3] этот принцип так:

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

https://ru.wikipedia.org/wiki/Принцип_подстановки_Барбары_Лисков


Видимо это из ТС пытались выманить на интервью
21 июл 19, 00:37    [21931068]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
Буквы солидаи можно трактовать и так и сяк и Холи варить на эту тему кто правее. Типа системы должны быть открыты для добавления функционала но не для изменения. Ты конечно же думаешь что они намекают что потомки не должны оверрайдить методы родителей да?
21 июл 19, 08:42    [21931103]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1973
andreykaT
Буквы солидаи можно трактовать и так и сяк и Холи варить на эту тему кто правее. Типа системы должны быть открыты для добавления функционала но не для изменения. Ты конечно же думаешь что они намекают что потомки не должны оверрайдить методы родителей да?


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

Сами принципы SOLID хороши понятно для разработки и то да се. Но если надо, то и синус может быть выше единицы.
21 июл 19, 09:12    [21931109]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
andreykaT
Буквы солидаи можно трактовать и так и сяк и Холи варить на эту тему кто правее. Типа системы должны быть открыты для добавления функционала но не для изменения. Ты конечно же думаешь что они намекают что потомки не должны оверрайдить методы родителей да?

Видимо его спросили это
если бы вместо этой инструкции Calculator cal = new My_Calculator();
была бы эта инструкция: Calculator cal = new Calculator ();

и он не смог ответить.

Я помню что в универе на 1м курсе я тоже не понял мотивации к использованию ООП и полиморфизма.
Я к тому времени неплохо знал Basic, Pascal, Assembler и тоже имел "свой" взгляд на вещи.

А тут? Как ткнуть носом доказательство? Этож не теорема мать ево Пифагора. Просто best practices.
Или так называемые философии программинга. Всякие Киссы. Солиды и Ягни. Попробуй их докажи
когда математики нет. Это не тождество что слева там нолик и справа доказано что нолик.

Да и вообще некоторым людям нужен отрезок времени длиной в жизнь чтобы понять какие-то
истины. Зачем женился например? Тоже вроде как безсмысленная тема. Женидьба.... Мдя.
21 июл 19, 10:38    [21931122]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2149
не понял пример.
Второй класс добавил метод который не нужен и не используется.
Значить и сам второй класс не нужен.
В чём подвох?
21 июл 19, 10:56    [21931127]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
А тут? Как ткнуть носом доказательство? Этож не теорема мать ево Пифагора. Просто best practices.
Или так называемые философии программинга. Всякие Киссы. Солиды и Ягни. Попробуй их докажи
когда математики нет. Это не тождество что слева там нолик и справа доказано что нолик.

Вот именно про это я и говорил в предыдущем топике, все эти SOLID и тд - лишь костыли, призванные улучшить изначально корявую философию ООП
21 июл 19, 11:51    [21931145]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
PetroNotC Sharp
не понял пример.
Второй класс добавил метод который не нужен и не используется.
Значить и сам второй класс не нужен.
В чём подвох?

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

какие то там лисковы, солиды и всё прочее.
21 июл 19, 15:14    [21931193]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1973
Andrey53791
Есть 2 класса. Calculator и My_Calculator, меня интересует, какая разница во 2 классе, если бы вместо этой инструкции Calculator cal = new My_Calculator();
была бы эта инструкция: Calculator cal = new Calculator ();
Разницы же никакой, и на мой взгляд проще будет этот вариант
Calculator cal = new Calculator ();
или для кого что удобнее? сталкивался с вопросами на собеседовании, но разницы никакой не вижу.


Разница на самом деле есть

инициализация класса Calculator cal = new My_Calculator(); будет идти дольше и памяти займет больше

Вам видимо надо было тупо ответить типо Принцип Барбары Лисков соблюден, работать будет дольше, но так же.

В общем на интервью часто всякие придурки встречаются надо действовать по обстоятельтсвам и быть на чеку как в песне у Владимира Семеновича

Но могут действовать они не прямиком,
Шасть в купе, и притвориться мужиком.
А сама наложит тола под корсет...
Ты проверяй, какого пола твой сосед
21 июл 19, 21:32    [21931326]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
вообще-то, я тоже не поняла по поводу Calculator cal = new My_Calculator()

в С++, если переопределить методы Калькулятора в МайКалькуляторе, то, условно говоря, калькулятор инициализированный как

Calculator *cal = new My_Calculator()
будет себя вести как калькулятор (и не будет использовать оверлоад методы)
Calculator *cal = new Calculator();
21 июл 19, 22:37    [21931354]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
Sergunka
Разница на самом деле есть
инициализация класса Calculator cal = new My_Calculator(); будет идти дольше и памяти займет больше
а вот это похоже на правду :)
21 июл 19, 22:40    [21931356]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
Sergunka
Andrey53791
Есть 2 класса. Calculator и My_Calculator, меня интересует, какая разница во 2 классе, если бы вместо этой инструкции Calculator cal = new My_Calculator();
была бы эта инструкция: Calculator cal = new Calculator ();
Разницы же никакой, и на мой взгляд проще будет этот вариант
Calculator cal = new Calculator ();
или для кого что удобнее? сталкивался с вопросами на собеседовании, но разницы никакой не вижу.


Разница на самом деле есть

инициализация класса Calculator cal = new My_Calculator(); будет идти дольше и памяти займет больше

Вам видимо надо было тупо ответить типо Принцип Барбары Лисков соблюден, работать будет дольше, но так же.

В общем на интервью часто всякие придурки встречаются надо действовать по обстоятельтсвам и быть на чеку как в песне у Владимира Семеновича

Но могут действовать они не прямиком,
Шасть в купе, и притвориться мужиком.
А сама наложит тола под корсет...
Ты проверяй, какого пола твой сосед


насколько больше второй вариант подъест памяти?
насколько это принципиально?

вы слышали про ковариантность и инвариантность?

что вы с этим лисковым пристали? весь солид - это лишь набор РЕКОМЕНДАЦИЙ. причем, местами весьма спорный.
21 июл 19, 22:42    [21931358]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
mini.weblab
Sergunka
Разница на самом деле есть
инициализация класса Calculator cal = new My_Calculator(); будет идти дольше и памяти займет больше
а вот это похоже на правду :)

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

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

Откуда: loopback
Сообщений: 42508
Вот еще такой вариант ответа.

К сообщению приложен файл. Размер - 10Kb
21 июл 19, 23:12    [21931370]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1973
mini.weblab
вопрос-то был на теорию, и я подумала, что тоже не смогла бы на него ответить.
вообще-то, в подобных случаях, я говорю, что ответа не знаю, и прошу интервьюера подсказать правильный ответ.


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

Вон как коллега возбудился только от упоминания Барбары
22 июл 19, 00:18    [21931392]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2149
mini.weblab
и не будет использовать оверлоад методы
их нет в примере. Что об этом разговаривать?
В плюсах около 80 методов инициализации класса).
22 июл 19, 00:35    [21931394]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

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

Откуда: loopback
Сообщений: 42508
Самый что ни на есть good way это на собеседовании показать фрагмент рабочего кода из проекта и обсудить его.
Во первых - свежий взгляд со стороны. Во вторых еще раз исполнить duck debugging, и самому проговорить свой код.
Возможно после этого и новые идеи пойдут. Не боги... как говорицца горшки обжигают.

Синтетические задачи наподобие обедающих философов или спящих парикмахеров интересны только теоретикам.
И далеки от практических задач которые могут возникнуть. Я к слову сам не уверен что смогу без подготовки
пояснить в чём проблема парикмахера и почему она вынесена как отдельный пункт среди проблем
concurrency/parallelism.

Вобщем нужна подготовка.
22 июл 19, 10:19    [21931473]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
mayton
Самый что ни на есть good way это на собеседовании показать фрагмент рабочего кода из проекта и обсудить его.
Во первых - свежий взгляд со стороны. Во вторых еще раз исполнить duck debugging, и самому проговорить свой код.
Возможно после этого и новые идеи пойдут. Не боги... как говорицца горшки обжигают.

Синтетические задачи наподобие обедающих философов или спящих парикмахеров интересны только теоретикам.
И далеки от практических задач которые могут возникнуть. Я к слову сам не уверен что смогу без подготовки
пояснить в чём проблема парикмахера и почему она вынесена как отдельный пункт среди проблем
concurrency/parallelism.

Вобщем нужна подготовка.

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

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

Откуда:
Сообщений: 2421
mayton
Самый что ни на есть good way это на собеседовании показать фрагмент рабочего кода из проекта и обсудить его.
Во первых - свежий взгляд со стороны. Во вторых еще раз исполнить duck debugging, и самому проговорить свой код.
Возможно после этого и новые идеи пойдут. Не боги... как говорицца горшки обжигают.

Синтетические задачи наподобие обедающих философов или спящих парикмахеров интересны только теоретикам.
И далеки от практических задач которые могут возникнуть. Я к слову сам не уверен что смогу без подготовки
пояснить в чём проблема парикмахера и почему она вынесена как отдельный пункт среди проблем
concurrency/parallelism.

Вобщем нужна подготовка.

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

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

Откуда: loopback
Сообщений: 42508
Ну они поэтому и называются философией разработки.

Я вот думаю если математик читает этот топик - он ни фига не поймет. И ещё больше убедится что программисты это шарлатаны. Любят по Фарисейски судить чужой код при этом опираясь на труды какой-то старухи Варвары.

Мдя. Для
22 июл 19, 12:52    [21931658]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Для математика нужна формула.
22 июл 19, 12:53    [21931659]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

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

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

Откуда:
Сообщений: 3024
Не совсем согласен насчет "проблем". Я соглашусь, что можно не знать текста самой задачи и попросить ее переформуоировать в треминах межпроцессного взаимодействия, но как их решить то вы просто обязаны знать.
Проблема парикмахера(как правильно шарить состояние между процессами\потоками) - на знание мьютексов, чтобы программа работала надо синхронизироваться на состоянии и допускать в критические блоки только один процесс
Проблема философов(доступ к одним и тем же ресурсам из нескольких потоков\процессов) - на знание как избежать дэдлок(брать ресурсы в определенном порядке + таймаут).

Ну и в принципе - если вы заявляете что обладаете знаниями многопоточного программирования, то странновато не знать классику
22 июл 19, 13:19    [21931691]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

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

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

Выяснить что?
22 июл 19, 13:20    [21931694]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
mayton,
ну вот смотри,
человека спрашивают про разницу между объектами, созданными методо1 и методом2, а он начинает че-то гнать насчет женитьбы и философии.
100500 неадекват же!
22 июл 19, 13:22    [21931696]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
забыл ник
Проблема философов(доступ к одним и тем же ресурсам из нескольких потоков\процессов) - на знание как избежать дэдлок(брать ресурсы в определенном порядке + таймаут).

Это как раз про то что "дефолтный порядок" породил дедлок.
22 июл 19, 13:27    [21931699]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
забыл ник,
выяснить насколько комфортно будет вместь работаться, и сработаетесь ли вообще
22 июл 19, 13:27    [21931700]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mini.weblab
mayton,
ну вот смотри,
человека спрашивают про разницу между объектами, созданными методо1 и методом2, а он начинает че-то гнать насчет женитьбы и философии.
100500 неадекват же!


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

Откуда: loopback
Сообщений: 42508
mini.weblab
mayton,
ну вот смотри,
человека спрашивают про разницу между объектами, созданными методо1 и методом2, а он начинает че-то гнать насчет женитьбы и философии.
100500 неадекват же!

Я нарисовал ответ картинкой. И это лучший ответ на данный вопрос. Я гарантирую это (с).
Про старуху Лискову в принципе тоже верно но отвязано от реальности. У меня - реальный боевой пример.
Иногда проще нарисовать чем говорить. Это из той-же области что объяснить ребёнку ОТО.
22 июл 19, 13:29    [21931705]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mini.weblab
забыл ник,
выяснить насколько комфортно будет вместь работаться, и сработаетесь ли вообще

В больших компаниях в основном собеседуют те кто свободен или есть желание\опыт по конкретным технологиям. Иногда набирают в новую команду и т.д, личностные качества должны проверяться HR, это вообще не предмет собеседоания. Конечно если собеседуемый ведет себя странновато я скажу об этом HR, но это никак не должно влиять на оценки
22 июл 19, 13:30    [21931706]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
забыл ник
Проблема философов(доступ к одним и тем же ресурсам из нескольких потоков\процессов) - на знание как избежать дэдлок(брать ресурсы в определенном порядке + таймаут).

Это как раз про то что "дефолтный порядок" породил дедлок.

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

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

Откуда:
Сообщений: 2421
забыл ник
Не совсем согласен насчет "проблем". Я соглашусь, что можно не знать текста самой задачи и попросить ее переформуоировать в треминах межпроцессного взаимодействия, но как их решить то вы просто обязаны знать.
Проблема парикмахера(как правильно шарить состояние между процессами\потоками) - на знание мьютексов, чтобы программа работала надо синхронизироваться на состоянии и допускать в критические блоки только один процесс
Проблема философов(доступ к одним и тем же ресурсам из нескольких потоков\процессов) - на знание как избежать дэдлок(брать ресурсы в определенном порядке + таймаут).

Ну и в принципе - если вы заявляете что обладаете знаниями многопоточного программирования, то странновато не знать классику

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

Откуда:
Сообщений: 3024
mini.weblab
забыл ник
Человека спрашивают про то как правильно создать объект в приложении, а он начинает задвигать про какие-то фабрики, синглтоны. HR, какого вы укурков опять допускаете?
необязательно, может человека спрашивают, что будет если создать объект неправильно
про синглтоны и фабрики вообще до вас никто не упоминал (это на тему укурков)

Ну судя по тому что вы пока с трудом умеете проводить аналогии и вычленять абстракции, предположу что ваш уровень где-то между джуниором и мидл. На таком уровне, вопросы типо как создать объект правильно допустимы и имеют смысл. С точки зрения сеньора и выше, одним упоминанием принципа из SOLID\паттерна\"проблемы философа" он просто смывает пласт вопросов и малозначительных деталей для обьяснения, что позволяет сразу перейти к следующей теме. Все эти принципы для того и придуманы чтобы коммуникация между девелоперами была быстрее и эффективнее, и если вы "тонете" в этом то есть два возможных обьяснения - либо неопытность либо нежелание учиться. Первый случай это вполне нормально для определенных позиций, но выведывая детали собеседующий потратит кучу времени и на остальные важные темы просто не хватит времени. И это прямым образом повлияет на отзыв о вас в первую очередь, потому что если не уверен лучше не бери(с)
22 июл 19, 13:42    [21931714]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
andreykaT
забыл ник
Не совсем согласен насчет "проблем". Я соглашусь, что можно не знать текста самой задачи и попросить ее переформуоировать в треминах межпроцессного взаимодействия, но как их решить то вы просто обязаны знать.
Проблема парикмахера(как правильно шарить состояние между процессами\потоками) - на знание мьютексов, чтобы программа работала надо синхронизироваться на состоянии и допускать в критические блоки только один процесс
Проблема философов(доступ к одним и тем же ресурсам из нескольких потоков\процессов) - на знание как избежать дэдлок(брать ресурсы в определенном порядке + таймаут).

Ну и в принципе - если вы заявляете что обладаете знаниями многопоточного программирования, то странновато не знать классику

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


Согласен, я просто часто собеседую потому в курсе,\но когда не знаю что-то или вылетело из головы - то правильный ответ такой - "Извините, я уже немного устал, я точно слышал об этой проблеме и наверняка знаю как ее решать, но не помню точного описания. Будьте добры сформулируйте в терминах экзекьютор\поток бла-бла и скорее всего я скажу вам как ее решить". Если собеседующий сам не сведущ, то это еще и некислый троллинг получится.
Ну и да, знать все нельзя, это очевидно. Иногда я спрашиваю веши напрямую не относящиеся к задаче, и не жду особо ответа, но если вдруг человек ответил, то это просто огромный плюс, значит он обучается\интересуется
22 июл 19, 13:46    [21931718]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
забыл ник,

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

Откуда:
Сообщений: 3024
mini.weblab
забыл ник,

и как же ответить на вопрос изначально заданный ТС ??!
(для человека претендующего на джуниора-мидла)


Давайте, определимся, надо отвечать на вопрос ТС или на вопрос, который ему задавали на собеседовании? Вопрос ТС практически бессмысленен, он о форме, а не о содержании. Черт его знает что его там спрашивали и как он это понял. Вся тема суть попытка понять что он хотел узнать:) На собеседовании явно вопрос звучал не так.

Что могли спросить на собеседовании так это - что такое полиморфизм и приведи пример на Java. Джун и мидл по идее ответили бы что-то типо - ну это когда наследуешься и переопределяешь методы и по одной ссылке можно вызвать разные методы. Подкованный школяр сказал бы что полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. Если бы спрашивали меня - я бы спросил в ответ а какой полиморфизм интересует - subtyping, parametric или ad-hoc? Думаю на этом бы тема полиморфизма закончилась.
ТС же скорее всего промямлил что-то невразумительное и собеседующие не поленились и стали вытягивать из него информацию, чтобы понять, понимает ли он полиморфизм хотя бы на уроне code monkey, привели пример, сделали сабклассы и начали задавать вопросы в стиле - а что вот тут вернется, а что если тут ссылку сделать на базовый класс. Вот и все
22 июл 19, 15:01    [21931771]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

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

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

Откуда:
Сообщений: 2421
забыл ник
mini.weblab
забыл ник,

и как же ответить на вопрос изначально заданный ТС ??!
(для человека претендующего на джуниора-мидла)

а какой полиморфизм интересует - subtyping, parametric или ad-hoc? Думаю на этом бы тема полиморфизма закончилась.

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

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

а какой полиморфизм интересует - subtyping, parametric или ad-hoc? Думаю на этом бы тема полиморфизма закончилась.

эх. еще бы это еще как то явно использовалось в реальных приложениях.

в скала как раз-таки все 3 и можно увидеть) Именно пересев на скалу я и понял чем они отличаются:)
22 июл 19, 15:22    [21931796]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

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

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

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

эх. еще бы это еще как то явно использовалось в реальных приложениях.

в скала как раз-таки все 3 и можно увидеть) Именно пересев на скалу я и понял чем они отличаются:)

Кстати да. Типизация тоже в Java существует но не так ярко выражена. Нет такой математичной строгости
как в Scala или Haskell.
22 июл 19, 15:29    [21931810]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
andreykaT
...я про парикмахеров и философов

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

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

в скала как раз-таки все 3 и можно увидеть) Именно пересев на скалу я и понял чем они отличаются:)

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

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

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

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

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

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

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

Откуда:
Сообщений: 2421
mayton
andreykaT
...я про парикмахеров и философов

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

а можно десятки лет проработать и не заниматься конкурирующим ПО в принципе. ну или на грани - делаем всё иммутабельным и идите вы в пень со своими локами и шаред ресурсами.
22 июл 19, 18:01    [21931998]     Ответить | Цитировать Сообщить модератору
 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]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Java Ответить