Основные понятия ООП (инкапсуляция, абстракция, полиморфизм и наследование)

Programming
Предыдущий Следующий

программистЕсть 4 механизма ООП: инкапсуляция, абстракция, полиморфизм и наследование. Был на собеседовании и меня просили про них рассказать. Я программист - не преподаватель, теорию я знаю только по потребности. Я знаю что все подумали так: "это шаровый вопрос". Я тоже с этим согласен. Мне больше надело другое, что ответ на этот вопрос, не показывает знания программиста вообще - это может только показать, как хорошо он учился в институте. А в институте меня учили только трем терминам, абстракцию - не упоминали, как по мне это правильно. Давайте вспомним, что эти термины означают, (я лично забываю не определения, а сами термины, вот не могу запомнить слова инкапсуляция и полиморфизм и все, хотя знаю что они означают).

Начнем с наследования. Вполне нормальное определение дается на википедии: позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. Другими словами, класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса. Как известно в С# не поддерживает множественное наследие. На собеседовании, сразу же после этой фразы задают вопрос: "А почему  не поддерживает?". И ответ, "потому что геморроя меньше" - не устраивает. Я тогда всегда задумаюсь, а человек, который спросил, знает ответ. Думаю, скорее нет, чем да. Просто в конце ответа нужно спросись у него правильный ответ, и увидеть что он сам не знает.

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

Инкапсуляция - это так называемый эффект чёрного ящика. Ты знаешь что нужно подать на вход, и знаешь что будет на выходе, сам процесс тебя не волнует. Для меня это одно из самых главных понятий. Его смысл - не забивать голову левой ерундой. Много людей на собеседовании про это забывают, и по этому задают такие глупые вопросы: "Как работает сборщик мусора?". А мне оно как веб-программисту нада? Инкапсуляция! я знаю что сборка мусора не мои проблемы, и могу быть классным программистом и не знать как там все работает. Пример: приходит уборщица на работу, а у нее начинают спрашивать, как работает пылесос, как там все вертится и т.д. Если она знает - это плюс, может подработать инженером, а так зачем оно ей. Еще любят спрашивать: "Чем отличается сокрытие от инкапсуляции?" Я на него ответа не знал. Слышал про "сокрытие", но что это, просто забыл (еще раз говорю я не преподаватель). После собеседования поискал в интернете, и понял какой это глупый вопрос (не факт что я нашел правильный ответ). Как для меня сокрытие - это часть инкапсуляции. Я даже не знаю, какой ответ от меня хотели получить. Я понял, что человек под инкапсуляцией понимал - не известность того, что происходит внутри метода. А вот сокрытие  - уровни доступа, т.е. private, internal, protected. Здесь идет просто разные школы, для меня сокрытие и есть инкапсуляция, и вопрос в чем разница - просто глупый. Это все равно что вопрос: "Чем отличается интерполяция от аппроксимации?" Вопрос глуп, потому что интерполяция - это часть (один из видов) аппроксимации. Еще бы спросил: "Чем отличается яблоко от яблока". И попробуй догадайся, что он хотел узнать: "Чем отличается яблоко (дерево) от яблока (плод)".

Абстракция. Вопрос: "Что такое абстракция?" для меня приравнивается к вопросам: "Что такое ООП?", "Что такое любовь?" и т.д. Зачем такое спрашивать? Определение, которое на вики, меня не устраивает. И самому тяжело дать ответ. Как для меня это представление реальных объектов, задач. действий и т.д. в программном виде.

На собеседовании нужно давать тестовое задание, а потом спрашивать по коду. А не искать ботаников, с которыми и работать противно.

  • В 10/5/2010 11:09:06 AM, Сергей К

    Знакомо был на собеседовании так спрашивали один в один эту ерунду , а вспомнить не могу вообще, а когда спросил, что такое Абстракция, так мне нагородили такого, что фиг поймешь!

  • В 4/11/2012 2:05:48 PM, Аноним

    Согласен с автором. Такая же фигня была вчера. Только на ios developera. Но набор вопросов один в один.

  • В 4/12/2012 11:54:12 AM, Аноним

    Леонид, Вы правы на 100%!

  • В 6/23/2012 11:06:35 PM, Аноним

    е***л я все пойду работать грущиком

  • В 8/29/2012 9:26:25 AM, Аноним

    ахаха))) точно, пойдемте в грузчики

  • В 12/11/2012 8:52:12 AM, Аноним

    да нет грузчиком это ж надо таскать туда суда надо работать в тех поддержке: -Алло -Да -Включить выключить пробывали? -Нет? Сейчас соединю со специалистом

  • В 1/7/2013 8:20:03 PM, Аноним

    "-Включить выключить пробывали?" -Хаха, повеселило. Кстати, такое реально существует, проверено.

  • В 3/30/2014 6:32:09 PM, Аноним

    > яблоко (дерево) Яблоня?

  • В 7/13/2015 10:22:46 PM, Аноним

    Груша (дерево) от груши (плод)

  • В 3/7/2016 11:23:11 AM, Аноним

    > Много людей на собеседовании про это забывают, и по этому задают такие глупые вопросы: "Как работает сборщик мусора?". А мне оно как веб-программисту нада? Да, конечно надо. Об этом можно не знать, что бы писать всякий простенький код, где на серверах от силы 100-200 подключений одновременно. А вот если работать хоть со сколько-нибудь нагруженной системой, то никак не можно говорить, что ты хороший asp-програмист, если ты даже о gs не знаешь.

Самостоятельный отпуск Опыт заказа вывоза мусора в Киеве Магія зміни: Від ночі до дня
Магія Вечірнього Неба: Відлякуйте втомленість дня і зануртеся у світ загадок і краси