LINUX.ORG.RU

ООП

 


1

1

Всем понятно что такое ООП (ООП - это объекты + рандомный набор
принципов программирования).
Но вот зачем работодатели требуют знания от будущих работников что
значит этот термин?
Знание смысла этого термина как то улучшает качество кода?
Если человек скажет что: «ООП это показавшая свою низкую
эффективность концепция», то его код лучше что ли будет или хуже?

★★

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

dizza ★★★★★
()

анонiмуса не тебя нету. Щас бы он тебе втёр про то как мессаджи бороздят просторы объектов.

anonymous
()
Ответ на: комментарий от dizza

Вы считаете, что если человек не знает «принципы ООП». То он не сможет написать свой класс и эффективно использовать его?

Int0l ★★
() автор топика
Ответ на: комментарий от Int0l

царя на тебя тоже нет. Он бы тебе объяснил, что ооп - суть для макак.

anonymous
()

зачем работодатели требуют знания от будущих работников что значит этот термин?

Всем понятно что такое ООП (ООП - это объекты + рандомный набор принципов программирования)

Зачем ты не ответил так собеседовавшим тебя, а обделался и прибежал на ЛОР плакаться?

winlook38 ★★
()
Последнее исправление: winlook38 (всего исправлений: 1)

сами хотят понять за одно ...

anonymous
()
Ответ на: комментарий от Int0l

Если не знает ни определения, ни смог описать своими словами, то вполне резонно что в коде будет такая же каша, как и в голове

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 1)

Если человек скажет что: «ООП это показавшая свою низкую эффективность концепция», то его код лучше что ли будет или хуже?

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

Gvidon ★★★★
()

Если человек скажет что: «ООП это показавшая свою низкую эффективность концепция», то его код лучше что ли будет или хуже?

Если человек так скажет, то, очевидно, данному работодателю он не подойдёт.

Знание смысла этого термина как то улучшает качество кода?

На самом деле востребованы:
1. Понимание инкапсуляции, намерение программиста изолировать публичный интерфейс от деталей реализации.
2. Способность рассматривать абстракции в терминах объектов, поскольку в этих терминах написана имеющаяся кодовая база, эти же термины использует документация по архитектуре.
3. Понимание полиморфизма, поскольку полиморфное поведение очень часто является «строительным кирпичиком» в более сложных программных конструкциях.

Дополнительным плюсом будет:
1. Знание шаблонов проектирования (то есть избитых, типовых конструкций для ряда регулярно всплывающих похожих друг на друга задач);
2. Понимание «Low Coupling» и «High Cohesion»;
3. Понимание принципов SOLID, стремление применять их в повседневной работе.

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

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)
Ответ на: комментарий от Int0l

Вы считаете, что если человек не знает «принципы ООП». То он не сможет написать свой класс и эффективно использовать его?

Вы считаете, что если человек не сможет пройти собеседование при приеме на работу, то он не будет способен работать на этой работе?

goingUp ★★★★★
()

Избранные теги: clojure, common lisp, lisp, lua, sbcl
Но вот зачем работодатели требуют знания от будущих работников ООП

Хах. Лол.

Manhunt ★★★★★
()

Если человек скажет что: «ООП это показавшая свою низкую
эффективность концепция», то его код лучше что ли будет или хуже?

То человек покажет себя как самовлюбленный задрот, которого на работу брать нельзя ибо он будет своим задротским нытьем про «ОПП говно давайте все перепишем на кложуру» выносить мозг и начальству и коллегам, вместо работы. ЧСХ эти персонажи не смогут найти самый простой баг, вместо этого включат нылку и пойдут пылесосить мозг про то что все надо переписать.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Даже если ООП не нужен, принципы ты должен знать. Хотя бы для того, чтобы обосновать его ненужность. А так ты выглядишь как даунито, который пастернака не читал. Или как мне один кадр заявил: дискретка? Это же какая то мутная байда из школы, зачем это программисту?

anonymous
()
Ответ на: комментарий от anonymous

Ну так я не против принципов ООП, я против определения ООП которое ограничено 4мя принципами. И потому как определение ограниченно, то использовать его теряется смысл.
По мне гораздо проще дать человеку задание. И посмотреть как он с ним справиться. А не парить мозги устаревшими терминами.

Int0l ★★
() автор топика
Ответ на: комментарий от Int0l

Там только 2 принципа — encapsulation и message passing. Всё остальное — сахар.

beastie ★★★★★
()
Ответ на: комментарий от Int0l

Я почтиал русскую википедию

И там написано работодатели требуют знания от будущих работников что значит этот термин? Или откуда ты это взял, если не с собеседования?

winlook38 ★★
()

Затем, что только в стиле ООП ты и будешь писать на этой работе. Иначе тебя туда не берут.

menangen ★★★★★
()
Ответ на: комментарий от Int0l

А как же наследование? Вроде без него ООП не ООП?

Вокруг наследования много споров. Ниже изложу свое имхо.

Для ООП желанно так называемое «наследование интерфейсов». Грубо говоря, интерфейс — это набор связанных друг с другом методов; интерфейс описывает возможности по взаимодействию с объектом. А «наследование интерфейса» — это способ указать, что некий объект реализует определенный интерфейс.

Вторая разновидность наследования — это так называемое «наследование реализации». И оно давно уже не в тренде, см https://en.wikipedia.org/wiki/Composition_over_inheritance

Так, вот, если человек понимает полиморфизм, то он в достаточной степени понимает и «наследование интерфейсов». А «наследование реализации» в норме использоваться не должно, это инструмент для каких-то очень специальных ситуаций. Поэтому отдельным пунктом про «наследование» я писать не стал.

Manhunt ★★★★★
()

Еще паттерны и банду четырех спрашивают. Я честно отвечаю, что не читал.

loz ★★★★★
()

показавшая свою низкую

эффективность концепция А знаешь, что 99% крупных приложений представлют из себя переписанные хомчками (скорости для) приложения, написанные в 80-90-е на лиспе и смолтоке? Просто от того, что доверяешь эффективный инструмент мартышке, ничего особеного от мартышки не ждать не приходится. И да, не все что именуется страусами, трупами, мартышками и прочими словом ООП, им на самом деле является.

anonymous
()
Ответ на: комментарий от anonymous

поцыэнт, Вы опять у главврача планшет с интернетом сперли?

anonymous
()
Ответ на: комментарий от Manhunt

Хах. Лол.

А что лол? lua — ООП-язык, lisp поддерживает ООП. Как раз таки не совсем понятен высер автора в данном контексте.

anonymous
()

Всем понятно что такое ООП (ООП - это объекты + рандомный набор

Садись - два.

Вот потому и спрашивают.

invy ★★★★★
()
Ответ на: комментарий от Manhunt

А «наследование реализации» в норме использоваться не должно, это инструмент для каких-то очень специальных ситуаций.

Если есть обобщенный код, с фига ли его не наследовать? Для каждого класса писать заново реализацию интерфейсов не слишком ли сурово? Зачем тогда дженерики нужны? Как всегда, кто-то из отцов ляпнул «наследование бяка», теперь каждый иксперд своим долгом считает это повторять.

anonymous
()

Всем понятно что такое ООП

ad populum. нет, не всем

Но вот зачем работодатели требуют знания от будущих работников что значит этот термин?

чтобы знать, что эти самые работники под этим термином подразумевают, и совпадает ли подразумеваемое со мнением спрашивающего

Если человек скажет что: «ООП это показавшая свою низкую эффективность концепция»

то ему надо будет обосновать свои слова

jtootf ★★★★★
()
Ответ на: комментарий от Int0l

Видимо, *правильным* следует считать определение Алана Кея, которому принадлежит термин. Кто вводит термин, тот его и определяет

Всё является объектом.

Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.

Каждый объект имеет независимую память, которая состоит из других объектов.

Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).

В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.

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

goodbigbeer
()
Ответ на: комментарий от anonymous

Если есть обобщенный код, с фига ли его не наследовать?

А сфига бы этому коду не быть деталью реализации?

Для каждого класса писать заново реализацию интерфейсов не слишком ли сурово?

Если нет синтаксического сахара, чтобы делегировать реализацию, значит это такой суровый язык :)

Зачем тогда дженерики нужны?

А причем тут дженерики?

Manhunt ★★★★★
()
Ответ на: комментарий от goodbigbeer

Каждый объект имеет независимую память, которая состоит из других объектов.

Вот есть у меня объект - символ W из каких объектов состоит его независимая память ?
И ведь независимая память этих объектов( независимой памяти W) тоже состоит из объектов c независимой памятью да?
Получается бесконечная рекурсия?

Int0l ★★
() автор топика
Ответ на: комментарий от Int0l

имвол W из каких объектов состоит его независимая память ?

там, видимо, не совсем корректный перевод, на самом деле не из самих объектов, а слотов с указателями на эти объекты.

Получается бесконечная рекурсия?

независимой памятью является лишь набор указателей. оbject1.a и object2.a могут указывать на один и тот же объект.

goodbigbeer
()
Ответ на: комментарий от anonymous

Если есть обобщенный код, с фига ли его не наследовать?

Дык обобщенный код это и есть чаще всего интерфейс.

Для каждого класса писать заново реализацию интерфейсов не слишком ли сурово?

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

Как всегда, кто-то из отцов ляпнул

Афаик, к композитингу всякие джуны и прочие хипстеры пришли чисто империческим путем, отцы тут не причем.

unt1tled ★★★★
()

Всем понятно что такое ООП

4.2

Deleted
()
Ответ на: комментарий от invy

Так я и смотрел определения в книжках. Везде они разные.
А у меня обобщенное определение.

Int0l ★★
() автор топика
Ответ на: комментарий от Int0l

Так я и смотрел определения в книжках. Везде они разные.

Т.е. открыл книжку/статью, полистал, закрыл и не вникал? Ну похоже, да.

А у меня обобщенное определение.

У тебя не определение, а фигня.

invy ★★★★★
()
Ответ на: комментарий от invy

Ну ладно назови мне стандарт/документ который дает четкое определение что является ООП, а что не является.

Int0l ★★
() автор топика
Ответ на: комментарий от Int0l

ООП нужно понять, поработать с ним и тогда ты и определение правильно напишешь, и не будешь задавать тупых вопросов.

Судя по твоему «определению», ты ООП не понял, с ним не работал достаточно, но пытаешься делать выводы.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)
Ответ на: комментарий от invy

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

Int0l ★★
() автор топика
Ответ на: комментарий от jtootf

Я там читал там несколько определений дается. Плюс еще разные определения в разноязычных Wiki и еще в книгах.

Int0l ★★
() автор топика
Ответ на: комментарий от jtootf

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

Int0l ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.