Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

четверг, 18 февраля 2010 г.

В чем разница между интерфейсом и абстрактным классом или какие вопросы задают на собеседовании?

Простые. Причем всегда простые. И ты либо знаешь ответ, либо нет. Но есть варианты. (читаем дальше...)

Если ответа не знаешь - можешь попробовать выкрутится, но это сразу становится заметно. Думаю, лучше признать, что "пока я ответа не знаю". Не нужно всего знать. Это вполне нормально. Чем шире знания тем мельче они, напротив чем уже тем глубже. Но основа знать стоит, хоть в теории. Потому совет нумбер 1 - во время собеседования интенсивно записывать непонятные слова и термины в графу "я это пока не знаю, пока".

Если ответ знаешь, возможны варианты. Бывает такое, что заучил ответ и не чувствуешь его, ибо не имеешь опыта. Это заметно. Потому что скорее всего тот кто тебя проверял - проходил тот же путь. А еще возможен вопрос, о котором в книжках не написано - его можно только на опыте получить.

Возможно ты имел подобный опыт, но никогда никому не объяснял "это". В таком случае тебе сложно подобрать нужные слова. Вроде как и знаешь ответ, но приходится подолгу подбирать слова. Кажется это даже хуже чем заучить. У меня получалось что-то вроде "смотрите, как я это понимаю и сделайте из этого вывод". Не знаю насколько эта стратегия выгодна. Пока не знаю.

Возможно ты уже кому-то рассказывал "это" и у тебя много разных вариантов и красочных метафор - но это долго и утомительно. Можно часами рассказывать как "корабли бороздят космические пространства", но скорее всего так ты уйдешь от темы. И тебя могут перебить "мы задали конкретный вопрос".

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

Вот как-то так, один простой вопрос и твой на него ответ может многое рассказать о твоем опыте.

А еще понравился очень вопрос "оцените свои знания по 5-бальной шкале". Я растерялся. Оценка подразумевает относительность. Относительно чего оценить знания? Относительно того что хотелось бы? Наверное ПОЛНЫЙ НОЛЬ (круглый скорее). Но на автомате выдал 4-ку. Вообще еще учиться и учиться, иначе бы не искал нового.

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

левел 1) Не знаю. / Ой! Мы в нашем проекте... (и пошла импровизация)

левел 2) Ну, это когда, это самое - интерфейсы имплементятся какими-то классами. Абстрактные классы наследуются наследниками. Еще, это, интерфейс не содержит логики, а абстрактный класс содержит. А еще, это, Колекция - это интерфейс...

левел 3) Представьте себе пальчиковую батарейку. Вы ее держите в руках и точно знаете, что это пальчиковая батарейка. Если вас попросить описать те критерии, которые позволяют вам утверждать, что это батарейка (к примеру, размером с палец, если засунуть в фонарик - он засветится, вольтметр покажет 1.5 вольта, с одной стороны пимпочка ас другой плоско), то этот список и будет описанием интерфейса "пальчиковая батарейка".

Интерфейс ничего не говорит про, то как батарейка работает и позволяет манипулировать ею просто не задумываясь как она это делает. Фонарику все равно как она устроена, ему главное получить обещанные 1,5 вольта с полюса с пимпочкой и плоского полюса. Обещание - это и есть интерфейс - договор между двумя объектами. И еще, вы просто не узнаете по внешнему виду что у вас в руках - батарейка 777, алкалайн, дюраселл, NiMH аккумулятор или портативный атомный реактор. Придется заглянуть под интерфейс и посмотреть внутреннюю реализацию.

Абстрактный класс это недонаследник - наследник, который программисту предстоит еще доделать. Это уже почти сформированный класс, который вот-вот и можно будет инстансировать объекты. Он используется, если разработчик хочет направить другого разработчика в нужное русло, обеспечить его тем поведением, которое ему пригодится при завершении класса. Это как придумать Фрукт, ожидая, что в будущем кто-то додумает Яблоко, Лимон, Грушу...

Из этого всего можно сделать самый короткий вывод 5 уровня:
- интерфейс говорит о поведении класса и заставляет отвечать его на вопрос "что я делаю?", а абстрактный класс определяет класс-наследник и заставляет его отвечать на вопрос "кто я?".

Я есть живой организм. "Живой организм" - абстрактный класс. "Я" - конкретная реализация класса-наследника "HomoSapiens".

Я веду себя как: программист, семьянин, блогописец, оптимист, люблю: кататься на велосипеде и вкусно покушать, говорю по русски, пишу в тексте очепятки, упрям.

Все это мои интерфейсы. С первым интерфейсом я могу подключиться к IT комапнии. Со вторым могу поддержать Беседу на тему Маленьких Детей. По третьему я сейчас взаимодейтсвую с Blogspot. Четвертый дает мне уверенности, что завтра будет лучше чем Сегодня. Интерфейс "Люблю кататься на велосипеде" зимплементился в детстве и тесно привязывает меня к Велосипеду. "Люблю вкусно покушать" накладывает ограничения на то, какую Пищу я агрегирую. "Говорю по русски" хотелось бы дополнить "I am speak English". "Пишу в тексте очепятки" часто вызывает у читателя улыбку. "Упертость" ....

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

Ну как-то так...

10 комментариев:

  1. Пасиб! :) Вот это бла бла бла, в котором иногда меня иногда уличают, рождает эти самые аналогии. Когда много об чем-то говоришь то и вдеть это начинаешь на другом уровне, объединять с другим опытом и рождать метафоры.

    ОтветитьУдалить
  2. Анонимный8 июля 2010 г., 14:07

    Шикарно! Особенно вот это: "Я есть живой организм. "Живой организм" - абстрактный класс. "Я" - конкретная реализация класса-наследника "HomoSapiens"."
    Даже я, балбес, понял :)

    ОтветитьУдалить
  3. Шикарно демонстрирует ваш уровень.
    За статью спасибо

    ОтветитьУдалить
  4. что значит владеть информацией, спс!

    ОтветитьУдалить
  5. Анонимный19 июня 2011 г., 14:10

    спасибо автору

    ОтветитьУдалить
  6. Рад, что вам помогло. Статья от затрат на приобретение опыта не освобождает - про собеседования еще много чего интересного можно рассказать, как и про интерфейсы. Но это уже поведаете вы в своем блоге, а тут, в комментариях, оставите линк.

    ОтветитьУдалить
  7. Анонимный28 июня 2011 г., 16:31

    "Самый лучший ответ мне кажется тот, который умещается в одно предложение и доступен для понимания твой Бабушке."

    По вашей логике, самый лучший ответ - левел 2.
    А левел 3 явно не вместился не только в одно предложение, но даже в один абзатц! Сплошная демагогия.

    ОтветитьУдалить
  8. "По вашей логике, самый лучший ответ - левел 2."
    А вот у вас, видать, с логикой некоторые проблемы. Советую не пролистать, а перечитать, ведь вы упустили самое важное "самый короткий вывод 5 уровня".
    Автору большое спасибо за отличную статью! Многое стало понятно, особенно, когда прорабатываешь материал и читаешь подобного плана статьи в совокупности с сухими определениями - вырисовывается более-менее прозрачная картина :)

    ОтветитьУдалить