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


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

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

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

    ОтветитьУдалить
  5. спасибо автору

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

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

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

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

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