Задания на собеседовании.
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 07.09.05 06:56
Оценка: +1
В скором времени собираюсь менять место работы, а значит, таскаться по собеседованиям. Собеседований, как таковых, я не боюсь, т.к. уверен в своих знаниях, но вот когда мне говорят фразу типа: "вот вам небольшое задание, вы должны его сделать за пол часа", кисти моих рук начинают колебаться с амплитудой 5-10см, не зависимо от сложности задания. И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) . Это для меня самое страшное на собеседовании!!! Так вот собственно вопрос...не будет ли не корректным с моей стороны попросить пройти этот этап собеседования каким-нибудь другим путём? Если это допустимо, то что можно предложить в замен?

ЗЫ Два раза я напарывался на это, причём оба раза провалился с крахом!!! А после одного из них, я настолько, извините за выражение, "обделался", что даже не смог вспомнить, что вызов метода через IDispatch::Invoke называется поздним связыванием!!!
Re: Задания на собеседовании.
От: egaron http://127.0.0.1
Дата: 07.09.05 07:58
Оценка: 3 (1)
SZI> ЗЫ Два раза я напарывался на это, причём оба раза провалился с крахом!!! А после одного из них, я настолько, извините за выражение, "обделался", что даже не смог вспомнить, что вызов метода через IDispatch::Invoke называется поздним связыванием!!!

бывает .... я когда сопромат сдавал, в упор забыл чему равен момент при вращении, хотя меня хоть ночью разбуди, все эти ф-лы мог назубок сказать. И препод знает, что я знаю, и я сам знаю ... а вспомнить — никак ! клин !


а на собеседованиях — по-разному.... предпочтительнее всего тестовые задания , выдаваемые на дом. Собеседование — это хуже чем экзамен, на экзамене хоть билеты знаешь. А тут каждый работодаетль спрашивает о том, что ему ближе, и если ты этого не знаешь (пусть знаешь все остальное) — то в его глазах падаешь ниже плинтуса.
Re: Задания на собеседовании.
От: Козьма Прутков Россия  
Дата: 07.09.05 07:59
Оценка:
ну, если проблема в клавишах — можно попробовать попросить порешать задачки на бумажке
А так мне кажется лучше над собой поработать: нет ничего страшного в решении задачек, допущении ошибок и т.д. Человек имеет право на ошибку, на незнание чего-то, и это нормально воспринимается. К тому же как правило сценарий собеседования один, вопросы, задачки и т.д., и заменить его на ходу не всегда удастся, ну просто не готов интервьюер к такому повороту, тока так, на смекалку устную задачку вспомнить сможет
Posted via RSDN NNTP Server 1.9
Да хранит вас господь в сухом прохладном месте...
Re[2]: Задания на собеседовании.
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 07.09.05 08:04
Оценка:
Здравствуйте, Козьма Прутков, Вы писали:

КП>ну, если проблема в клавишах — можно попробовать попросить порешать задачки на бумажке

Угу, а ты представь, как я буду писать на бумажке, если по клавишам попасть не могу Да и вообще, прогать на бумажке — не есть гуд
КП>А так мне кажется лучше над собой поработать: нет ничего страшного в решении задачек, допущении ошибок и т.д.
Только вот как заставить понять это моё подсознание?!?! Йога?
Re[3]: Задания на собеседовании.
От: Козьма Прутков Россия  
Дата: 07.09.05 08:23
Оценка: 2 (2) +2
> Только вот как заставить понять это моё подсознание?!?! Йога?
Ну, я знаю 2 лекарства
1) много ходить на собеседования. Тогда просто устанешь нервничать, они все сольются в серый поток и не будут тревожить.
2) Ну, не йога, но мне афигенную уверенность дало кратеньколе изучение экзистенциализма в рамках курса в аспирантуре

Ты вот возьми и подумай, чем тебе грозит каждый из исходов собеседования.
1) успехом и приемом на работу — вот и славно, мы этого и хотели
2) неуспехом и вежливым отказом — ну и хрен, сами дураки что такого спеца на работу не взяли.
3) неуспехом и тут же излитым негативом — ну, это только если ты совсем не знаешь даже элементарных вещей (а ты их ессно знаешь, ты сам об этом писал), порешь чушь и т.п. То есть исход крайне маловероятный, но если произойдет — хочешь ли ты работать с людьми, таким образом реагирующими на твое незнание или ошибку? Вряд ли...
4)... не хватает фантазии, но по аналогии.
Так что любой исход конструктивен, свет клином на этом работодателе не сошелся, так что шашку наголо и
Posted via RSDN NNTP Server 1.9
Да хранит вас господь в сухом прохладном месте...
Re: Задания на собеседовании.
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 07.09.05 08:47
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

SZI> Если это допустимо, то что можно предложить в замен?


Попробуй. Например попроси разрешение дома решить.

SZI> ЗЫ Два раза я напарывался на это, причём оба раза провалился с крахом!


Сократ или какой-то там великий оратор, для тренировки дикции набирал полный рот камней и толкал речь.
...
Ты стеснительный?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Вселенная бесконечна как вширь, так и вглубь.
Re: Задания на собеседовании.
От: S_Mall Россия  
Дата: 07.09.05 09:07
Оценка:
ИМХО, это не твоя проблема по большему случаю. Это проблема рекрутера так построить собеседование, чтобы искатель не был под стрессом, иногда достаточно пару шуток, улыбки, чтобы разрядить обстановку. Говорю тебе это, как человек, имеющий достаточный опыт собеседований и с той и с другой стороны А самому тебе советую просто не идти на собеседование, как на убой... Вспомни перед дверью что-нибудь приятное, какой-нибудь успех в своей жизни, чтобы тебя наполнили положительные эмоции — и вперед... И старайся нести эти эмоции на протяжении всего интервью. Рано или поздно успех придет.
Re[2]: Задания на собеседовании.
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 07.09.05 09:13
Оценка:
Здравствуйте, S_Mall, Вы писали:

S_M>ИМХО, это не твоя проблема по большему случаю. Это проблема рекрутера так построить собеседование, чтобы искатель не был под стрессом, иногда достаточно пару шуток, улыбки, чтобы разрядить обстановку. Говорю тебе это, как человек, имеющий достаточный опыт собеседований и с той и с другой стороны А самому тебе советую просто не идти на собеседование, как на убой... Вспомни перед дверью что-нибудь приятное, какой-нибудь успех в своей жизни, чтобы тебя наполнили положительные эмоции — и вперед... И старайся нести эти эмоции на протяжении всего интервью. Рано или поздно успех придет.


Да в том-то и дело, что я иду на собеседование всегда в отличном настроении, мне всегда приятно пообщаться коллегой, рассказать о своих знаниях. На этом этапе собеседования идёт всё гладко и в приятной обстановке. Но как только дело доходит до...тут я всё рассказал уже.
Re[2]: Задания на собеседовании.
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 07.09.05 09:20
Оценка:
Здравствуйте, Real 3L0, Вы писали:

R3>Попробуй. Например попроси разрешение дома решить.


Вот это меня бы полностью устроило.

R3>Ты стеснительный?


Нет, просто я не хочу поставить человека в неловкое положение, поэтому и спрашиваю, как это будет звучать с его стороны
Re: Задания на собеседовании.
От: novik Россия  
Дата: 07.09.05 11:18
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

...

Я сам такой. Потому и программист, а не конферансье, что не могу работать под чужим взглядом. А слабо научиться?
Re[3]: Задания на собеседовании.
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 07.09.05 11:20
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

R3>>Ты стеснительный?

SZI> Нет, просто я не хочу поставить человека в неловкое положение, поэтому и спрашиваю, как это будет звучать с его стороны

Не понял, может ты хотел сказать с твоей стороны?
... << RSDN@Home 1.1.4 stable rev. 510>>
Вселенная бесконечна как вширь, так и вглубь.
Re[4]: Задания на собеседовании.
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 07.09.05 11:44
Оценка:
Здравствуйте, Real 3L0, Вы писали:

R3>Здравствуйте, Sh1ZoID, Вы писали:


R3>>>Ты стеснительный?

SZI>> Нет, просто я не хочу поставить человека в неловкое положение, поэтому и спрашиваю, как это будет звучать с его стороны

R3>Не понял, может ты хотел сказать с твоей стороны?


Ну да...
Re[3]: Задания на собеседовании.
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 07.09.05 12:00
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

SZI> Нет, просто я не хочу поставить человека в неловкое положение, поэтому и спрашиваю, как это будет звучать с его стороны


Ну спроси да узнаешь, если не согласится, то ничего не потеряешь.
Я всё таки склоняюсь что это волнение. Ничего плохого тут нет, я сам на дипломе просто бешенно волновался — забыл текст напрочь. Так что попроси домой что-нить, но посложнее, чтоб доказать, что ты сам решал. Ну и ещё чтоб при проверке тестового задания они по нему тебя тоже погоняли ... или и тут заволнуешся?
... << RSDN@Home 1.1.4 stable rev. 510>>
Вселенная бесконечна как вширь, так и вглубь.
Re[4]: Задания на собеседовании.
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 07.09.05 12:19
Оценка:
Здравствуйте, Real 3L0, Вы писали:

R3>Здравствуйте, Sh1ZoID, Вы писали:


SZI>> Нет, просто я не хочу поставить человека в неловкое положение, поэтому и спрашиваю, как это будет звучать с его стороны


R3>Ну спроси да узнаешь, если не согласится, то ничего не потеряешь.

R3>Я всё таки склоняюсь что это волнение. Ничего плохого тут нет, я сам на дипломе просто бешенно волновался — забыл текст напрочь. Так что попроси домой что-нить, но посложнее, чтоб доказать, что ты сам решал. Ну и ещё чтоб при проверке тестового задания они по нему тебя тоже погоняли ... или и тут заволнуешся?

Нет, не заволнуюсь, уверен Спасибо
Re[2]: Задания на собеседовании.
От: Shtirliz Россия  
Дата: 07.09.05 14:45
Оценка: +1
Здравствуйте, S_Mall, Вы писали:

S_M>ИМХО, это не твоя проблема по большему случаю. Это проблема рекрутера так построить собеседование, чтобы искатель не был под стрессом, иногда достаточно пару шуток, улыбки, чтобы разрядить обстановку. Говорю тебе это, как человек, имеющий достаточный опыт собеседований и с той и с другой стороны А самому тебе советую просто не идти на собеседование, как на убой... Вспомни перед дверью что-нибудь приятное, какой-нибудь успех в своей жизни, чтобы тебя наполнили положительные эмоции — и вперед... И старайся нести эти эмоции на протяжении всего интервью. Рано или поздно успех придет.



Полностью согласен.
Я когда ходил по собеседованиям, брал за основу принцип "Если мы вам не подходим — вы нам нафиг не нужны"...

На вопросы отвечал честно, задачки решал как мог, если не мог то так и говорил что не могу этого сделать с ходу. И просил объяснить в чем я именно ошибся и как нада правильно.

Так что самое главное не волноваться. В этом вся проблема и трясущиеся руки.

З.Ы.

Не боись этих интервьюеров. Они такие же люди как и ты.
Дункан Маклауд любил ходить в лес и издеваться над кукушками.
138385660
Re: квадратики
От: ilya_ny  
Дата: 08.09.05 03:25
Оценка:
собеседование.. 3 мужика
1.
один нарисовал квадратик, другой взял у него бумажку, подумал немного, и рядом подрисовал прямоугольничек и спращивает : "что от чего порождено ? а нарисуй-ка нам классы!"
я говорю, что квадратик порожден от прямоугольничка, на что третий мужичек сразу и говорит : "а не фига вы, молодой человек, ооп не знаете"
после этого третий ничего не произнес до самого конца собеседования.
2.
потом был вопрос в каких случаях надо применять интерфейсы, а в каких абстрактные классы

3. в каком порядке проинициализируются a, b, c

class A{
int a;
int b;
int c;
public:
A() : c(2), a(1), b(0)
};


4. есть ли тут ошибка:
class A{
public:
  A& operator+ (A a);
};


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



вот такие вопросы были
Re: :)
От: DimaR Ниоткуда  
Дата: 08.09.05 06:17
Оценка: +1
У тебя есть подруга ?

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

Проверено веками
while(work){ money++; time--; if(!time){ die_happy();} }
Re[2]: квадратики
От: Me_ Россия  
Дата: 08.09.05 06:46
Оценка:
Здравствуйте, ilya_ny, Вы писали:


_>4. есть ли тут ошибка:

_>
_>class A{
_>public:
_>  A& operator+ (A a);
_>};
_>


_>я говорю, что нету, что компилироваться будет.

_>он говорит, ок, компилироваться будет, а работать не будет
_>я говорю, что можно и так сделать, что работать будет.. а он НЕТ НЕТ НЕТ...

Работать не будет если нужен какой-нить хитрый конструктор копиропания, но конечно, такие вещи нужно уточнять.
И что? не пошел туда?

Мне кстати как-то тоже попался интересный интервьюер. Он не знал зачем нужно слово virtual перед функцией — был уверен, что оно только для того, чтобы в классе-потомке эту функцию можно было переопределить, типа на обычную фун-цию слово override поставить нельзя (по шарпу собеседование). Я уж не стал его расстраивать
Re[2]: :)
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 08.09.05 06:47
Оценка:
Здравствуйте, DimaR, Вы писали:

DR>У тебя есть подруга ?


Ну да...

DR>Мужчина, который может сделать женщину счастливой, быстро избавляется от страхов.


DR>Проверено веками


...а при чём здесь это?
Re[2]: квадратики
От: LuciferMoscow Россия  
Дата: 08.09.05 06:52
Оценка:
Здравствуйте, ilya_ny, Вы писали:

_>собеседование.. 3 мужика

_>1.
_>один нарисовал квадратик, другой взял у него бумажку, подумал немного, и рядом подрисовал прямоугольничек и спращивает : "что от чего порождено ? а нарисуй-ка нам классы!"
_>я говорю, что квадратик порожден от прямоугольничка, на что третий мужичек сразу и говорит : "а не фига вы, молодой человек, ооп не знаете"
_>после этого третий ничего не произнес до самого конца собеседования.
Абстрактный класс CShape(чисто виртуальный метода Draw) и производные от него CSqure,etc

_>2.

_>потом был вопрос в каких случаях надо применять интерфейсы, а в каких абстрактные классы
А в чем разница?

_>3. в каком порядке проинициализируются a, b, c


_>
_>class A{
_>int a;
_>int b;
_>int c;
_>public:
_>A() : c(2), a(1), b(0)
_>};
_>

В таком порядке: a,b,c(Ответ по алфавиту в данном случае можно считать правильным )
_>4. есть ли тут ошибка:
_>
_>class A{
_>public:
_>  A& operator+ (A a);
_>};
_>


_>я говорю, что нету, что компилироваться будет.

_>он говорит, ок, компилироваться будет, а работать не будет
_>я говорю, что можно и так сделать, что работать будет.. а он НЕТ НЕТ НЕТ...
Он прав. Возврат ссылки на локальную переменную.

P.S. Прошу прощения за объем цитирования. Ничего вырезать не смог.
Re[3]: квадратики
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 08.09.05 06:57
Оценка: :)
Здравствуйте, LuciferMoscow, Вы писали:

LM>P.S. Прошу прощения за объем цитирования. Ничего вырезать не смог.


Ладно уж меня зверем-то выставлять... В данном случае все вполне нормально.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий
Re[3]: квадратики
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 08.09.05 06:58
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

_>>2.

_>>потом был вопрос в каких случаях надо применять интерфейсы, а в каких абстрактные классы
LM>А в чем разница?

Хммм...мне тоже интересно. Такое ощущение, что это вопрос по Шарпу, а не по СиПиПи
Re[3]: квадратики
От: Me_ Россия  
Дата: 08.09.05 07:05
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

_>>2.

_>>потом был вопрос в каких случаях надо применять интерфейсы, а в каких абстрактные классы
LM>А в чем разница?
Ну вообще вопрос по шарпу больше. В шарпе запрещено множественное наследование (интерфейсов можно), так что разница есть.

_>>4. есть ли тут ошибка:

_>>
_>>class A{
_>>public:
_>>  A& operator+ (A a);
_>>};
_>>


_>>я говорю, что нету, что компилироваться будет.

_>>он говорит, ок, компилироваться будет, а работать не будет
_>>я говорю, что можно и так сделать, что работать будет.. а он НЕТ НЕТ НЕТ...
LM>Он прав. Возврат ссылки на локальную переменную.

Так возвратит же this, и все работать будет. Или я уже совсем си++ забыл?
Re[2]: квадратики
От: fessa  
Дата: 08.09.05 07:08
Оценка: 4 (2) +1
Здравствуйте, ilya_ny, Вы писали:

_>1.

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

может, эта статья прояснит ответ 3-го мужика

http://www.objectmentor.com/resources/articles/lsp.pdf
Re[4]: квадратики
От: Ulin США  
Дата: 08.09.05 07:12
Оценка:
Здравствуйте, Me_, Вы писали:

_>>>4. есть ли тут ошибка:

_>>>
_>>>class A{
_>>>public:
_>>>  A& operator+ (A a);
_>>>};
_>>>


_>>>я говорю, что нету, что компилироваться будет.

_>>>он говорит, ок, компилироваться будет, а работать не будет
_>>>я говорю, что можно и так сделать, что работать будет.. а он НЕТ НЕТ НЕТ...
LM>>Он прав. Возврат ссылки на локальную переменную.

Me_>Так возвратит же this, и все работать будет. Или я уже совсем си++ забыл?


Ну да. Вернет this. Все нормально. Возврат ссылки даст написать так: a+b = 1; что не есть гут
но в целом вроде вполне работоспособно
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: квадратики
От: Ulin США  
Дата: 08.09.05 07:18
Оценка:
Здравствуйте, fessa, Вы писали:

F>Здравствуйте, ilya_ny, Вы писали:


F>может, эта статья прояснит ответ 3-го мужика


F>http://www.objectmentor.com/resources/articles/lsp.pdf


Э-э, а разве нельзя сказать, что квадрат ЯВЛЯЕТСЯ частным случаем прямоугольника?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: квадратики
От: Me_ Россия  
Дата: 08.09.05 07:23
Оценка:
Здравствуйте, Ulin, Вы писали:

U>Ну да. Вернет this. Все нормально. Возврат ссылки даст написать так: a+b = 1; что не есть гут

U>но в целом вроде вполне работоспособно

Тогда скорее ошибка в том, что возвращается неконстантная ссылка
Re[4]: квадратики
От: fessa  
Дата: 08.09.05 07:23
Оценка: 4 (1)
Здравствуйте, Ulin, Вы писали:

U>Здравствуйте, fessa, Вы писали:


F>>Здравствуйте, ilya_ny, Вы писали:


F>>может, эта статья прояснит ответ 3-го мужика


F>>http://www.objectmentor.com/resources/articles/lsp.pdf


U>Э-э, а разве нельзя сказать, что квадрат ЯВЛЯЕТСЯ частным случаем прямоугольника?


...
No! A square might be a rectangle, but a Square object is definitely not a Rectangle
object. Why? Because the behavior of a Square object is not consistent with the
behavior of a Rectangle object. Behaviorally, a Square is not a Rectangle! And it
is behavior that software is really all about.
...

Советую всё же прочитать статью. Если трудно на английском — можно поискать и на русском...
Re[5]: квадратики
От: Me_ Россия  
Дата: 08.09.05 07:33
Оценка: +1 -2
Здравствуйте, fessa, Вы писали:

F>...

F>No! A square might be a rectangle, but a Square object is definitely not a Rectangle
F>object. Why? Because the behavior of a Square object is not consistent with the
F>behavior of a Rectangle object. Behaviorally, a Square is not a Rectangle! And it
F>is behavior that software is really all about.
F>...


А вот про поведение ничего сказано не было на собеседовании. Если основываться только на формах — то наследование прямоугольник->квадрат — абсолютно правильно.
Re[4]: квадратики
От: LuciferMoscow Россия  
Дата: 08.09.05 07:40
Оценка: 2 (1) -1
Здравствуйте, Me_, Вы писали:

Me_>Здравствуйте, LuciferMoscow, Вы писали:


_>>>4. есть ли тут ошибка:

_>>>
_>>>class A{
_>>>public:
_>>>  A& operator+ (A a);
_>>>};
_>>>

_>>>я говорю, что нету, что компилироваться будет.
_>>>он говорит, ок, компилироваться будет, а работать не будет
_>>>я говорю, что можно и так сделать, что работать будет.. а он НЕТ НЕТ НЕТ...
LM>>Он прав. Возврат ссылки на локальную переменную.
Me_>Так возвратит же this, и все работать будет. Или я уже совсем си++ забыл?
Если так, то отрыв рук — самое мягкое что следует делать за такое. += и + разные вещи, а человек,который будет сопровождать ЭТО должен догадыватся, что какой-то "умник" ТАК переопределил +
Re[6]: квадратики
От: fessa  
Дата: 08.09.05 07:41
Оценка:
Здравствуйте, Me_, Вы писали:


Me_>А вот про поведение ничего сказано не было на собеседовании. Если основываться только на формах — то наследование прямоугольник->квадрат — абсолютно правильно.


А зачем рассматривать абстрактную модель сферической лошади в вакууме —
кому нужны классы, которые работают не так, как от них ожидается?

"All derivatives must conform to the behavior that clients expect of the base classes that they use."
Re[3]: квадратики
От: vpedak  
Дата: 08.09.05 07:57
Оценка:
Me_ wrote:
>
> Мне кстати как-то тоже попался интересный интервьюер. Он не знал зачем
> нужно слово virtual перед функцией — был уверен, что оно только для
> того, чтобы в классе-потомке эту функцию можно было переопределить, типа
> на обычную фун-цию слово override поставить нельзя (по шарпу
> собеседование). Я уж не стал его расстраивать

Еще раз, чтобы я до конца понял. Вы считаете что в C# можно
переопределить фунцию которая не определена как virtual? И еще этим
гордитесь?

Может как-нибудь попробуете это сделать сами для начала? Или можно
просто спецификацию почитать, тоже помогает.



Вячеслав Педак
Posted via RSDN NNTP Server 1.9
Re[5]: квадратики
От: Ulin США  
Дата: 08.09.05 08:06
Оценка:
Здравствуйте, fessa, Вы писали:

F>Советую всё же прочитать статью. Если трудно на английском — можно поискать и на русском...


Прочитал. Действительно, Вы правы. Оказывается, это классический пример нарушения LSP
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: квадратики
От: Me_ Россия  
Дата: 08.09.05 08:36
Оценка: :)
Здравствуйте, vpedak, Вы писали:


V>Еще раз, чтобы я до конца понял. Вы считаете что в C# можно

V>переопределить фунцию которая не определена как virtual? И еще этим
V>гордитесь?
Хмм, а уж не у вас ли я собеседовался?
Вы что-нибудь слышали про ключевое слово new? и про его применение в отношении функций?

V>Может как-нибудь попробуете это сделать сами для начала? Или можно

V>просто спецификацию почитать, тоже помогает.
Прежде чем давать подобные советы, стоит хотя бы попробовать проделать это самому, вам не кажется? А то складывается впечатление, что вы не читали даже предупреждения компилятора, не то что спецификацию
Re[5]: квадратики
От: Me_ Россия  
Дата: 08.09.05 08:40
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

Me_>>Так возвратит же this, и все работать будет. Или я уже совсем си++ забыл?

LM>Если так, то отрыв рук — самое мягкое что следует делать за такое. += и + разные вещи, а человек,который будет сопровождать ЭТО должен догадыватся, что какой-то "умник" ТАК переопределил +

Ясно, вспомнил 2 курс
Re[7]: квадратики
От: Me_ Россия  
Дата: 08.09.05 09:14
Оценка: 1 (1)
Здравствуйте, fessa, Вы писали:


F>А зачем рассматривать абстрактную модель сферической лошади в вакууме —

F>кому нужны классы, которые работают не так, как от них ожидается?

Класс будет работать так, как мы его запрограммируем.


F>"All derivatives must conform to the behavior that clients expect of the base classes that they use."


Так где в нашем случае нарушается это правило?
Re[5]: квадратики
От: vpedak  
Дата: 08.09.05 10:17
Оценка:
Me_ wrote:

> Вы что-нибудь слышали про ключевое слово new? и про его применение в

> отношении функций?
>

слышал конечно, но new != override. А разговор был именно про него —
"типа на обычную фун-цию слово override поставить нельзя" (ваши слова).
Так вот на обычную функцию слово override поставить таки нельзя. Хотя
new конечно можно.

> Прежде чем давать подобные советы, стоит хотя бы попробовать проделать

> это самому, вам не кажется? А то складывается впечатление, что вы не
> читали даже предупреждения компилятора, не то что спецификацию

читал конечно и то и другое, именно поэтому и возмутился.



Вячеслав Педак
Posted via RSDN NNTP Server 1.9
Re[6]: квадратики
От: Me_ Россия  
Дата: 08.09.05 10:44
Оценка:
Здравствуйте, vpedak, Вы писали:

V>слышал конечно, но new != override. А разговор был именно про него —

V>"типа на обычную фун-цию слово override поставить нельзя" (ваши слова).
V>Так вот на обычную функцию слово override поставить таки нельзя. Хотя
V>new конечно можно.

Ясно, мы не поняли друг друга.
"типа на обычную фун-цию слово override поставить нельзя" — это я как процитировал своего интервьера, т.к. про new ему скорее всего ничего известно не было.
Re[8]: квадратики
От: Ulin США  
Дата: 08.09.05 10:59
Оценка: +1
Здравствуйте, Me_, Вы писали:

F>>"All derivatives must conform to the behavior that clients expect of the base classes that they use."


Me_>Так где в нашем случае нарушается это правило?


Цитата из вышеприведенной статьи:

At this point in time we have two classes, Square and Rectangle, that appear to work.
No matter what you do to a Square object, it will remain consistent with a mathematical
square. And regardless of what you do to a Rectangle object, it will remain a mathe-
matical rectangle. Moreover, you can pass a Square into a function that accepts a pointer
or reference to a Rectangle, and the Square will still act like a square and will remain
consistent.
Thus, we might conclude that the model is now self consistent, and correct. However,
this conclusion would be amiss. A model that is self consistent is not necessarily consis-
tent with all its users! Consider function g below.
void g(Rectangle& r)
{
r.SetWidth(5);
r.SetHeight(4);
assert(r.GetWidth() * r.GetHeight()) == 20);
}
This function invokes the SetWidth and SetHeight members of what it believes
to be a Rectangle. The function works just fine for a Rectangle, but declares an
assertion error if passed a Square. So here is the real problem: Was the programmer who
wrote that function justified in assuming that changing the width of a Rectangle leaves
its height unchanged?
Clearly, the programmer of g made this very reasonable assumption. Passing a
Square to functions whose programmers made this assumption will result in problems.
Therefore, there exist functions that take pointers or references to Rectangle objects,

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: квадратики
От: Me_ Россия  
Дата: 08.09.05 11:56
Оценка: 4 (1) +1
Здравствуйте, Ulin,

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

На собеседовании надо было уточнить функционал этих двух классов, такого однозначного ответа типа "вы не понимаете ООП" быть не может.
Re[3]: квадратики
От: ilya_ny  
Дата: 08.09.05 12:08
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:


_>>1.

LM>Абстрактный класс CShape(чисто виртуальный метода Draw) и производные от него CSqure,etc
нет. он имел в виду, что есть какая-то лажа с именно квадратом и прямоугольником..
но что именно я так и не знаю

_>>2.

_>>потом был вопрос в каких случаях надо применять интерфейсы, а в каких абстрактные классы
LM>А в чем разница?
???

_>>4. есть ли тут ошибка:

_>>
_>>class A{
_>>public:
_>>  A& operator+ (A a);
_>>};
_>>


_>>я говорю, что нету, что компилироваться будет.

_>>он говорит, ок, компилироваться будет, а работать не будет
_>>я говорю, что можно и так сделать, что работать будет.. а он НЕТ НЕТ НЕТ...

LM>Он прав. Возврат ссылки на локальную переменную.

вот это он так подковырнуть хотел. на что я ответи, что в самом тьупом случае можно завести глобалную переменную и возвращать ссылку на нее... и все работать будет — цель достигнута
Re[10]: квадратики
От: Ulin США  
Дата: 08.09.05 12:08
Оценка:
Здравствуйте, Me_, Вы писали:

Me_>Здравствуйте, Ulin,


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

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

Me_>На собеседовании надо было уточнить функционал этих двух классов, такого однозначного ответа типа "вы не понимаете ООП" быть не может.

Согласен, однозначно утверждать о незнании ООП в данном случае рано. Неплохо было бы попробовать подвести соискателя к подводным камням, imho они тут не самые очевидные...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: квадратики
От: LuciferMoscow Россия  
Дата: 08.09.05 12:18
Оценка:
Здравствуйте, ilya_ny, Вы писали:

_>Здравствуйте, LuciferMoscow, Вы писали:

LM>>Он прав. Возврат ссылки на локальную переменную.
_>вот это он так подковырнуть хотел. на что я ответи, что в самом тьупом случае можно завести глобалную переменную и возвращать ссылку на нее... и все работать будет — цель достигнута
multithreading.
Re[2]: квадратики (поправочка к #4)
От: ilya_ny  
Дата: 08.09.05 12:30
Оценка:
Здравствуйте, ilya_ny, Вы писали:


_>4. есть ли тут ошибка:

_>
_>class A{
_>public:
_>  A& operator+ (A a);
_>};
_>


_>я говорю, что нету, что компилироваться будет.

_>он говорит, ок, компилироваться будет, а работать не будет
_>я говорю, что можно и так сделать, что работать будет.. а он НЕТ НЕТ НЕТ...

извиняюсь...
сейчас вспомнил — там СТАТИЧЕСКИЙ оператор +, поэтому никаких this возвращать нельзя было.
ну а наш диалог с ним остается в силе
Re[4]: квадратики
От: fomiha  
Дата: 08.09.05 12:36
Оценка:
Здравствуйте, ilya_ny, Вы писали:

_>Здравствуйте, LuciferMoscow, Вы писали:



_>>>1.

LM>>Абстрактный класс CShape(чисто виртуальный метода Draw) и производные от него CSqure,etc
_>нет. он имел в виду, что есть какая-то лажа с именно квадратом и прямоугольником..
_>но что именно я так и не знаю

то что прямоугольник порожден от квадрата следует из того, что квадрат можно описать одним свойством
длина его стороны(a), а у прямоугольника появляется новое свойство — длина другой стороны (в). Итого прямоугольник наследуется от квадрата с появлением дополнительного своего свойства.
Re[5]: квадратики
От: Alexey_ch Швейцария  
Дата: 08.09.05 14:26
Оценка:
Здравствуйте, fomiha, Вы писали:
F>то что прямоугольник порожден от квадрата следует из того, что квадрат можно описать одним свойством
F>длина его стороны(a), а у прямоугольника появляется новое свойство — длина другой стороны (в). Итого прямоугольник наследуется от квадрата с появлением дополнительного своего свойства.
ООП должен облегчать жизнь программисту, не так ли?

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

P.S. Квадрат нельзя описать одним свойством, т.к. без знания, что с этим свойством делать, квадрат не нарисуется И это знание как раз заключено в методе Draw().

However, let’s assume that we are not very concerned with memory efficiency. Are
there other problems? Indeed! Square will inherit the SetWidth and SetHeight functions. These functions are utterly inappropriate for a Square , since the width and height of a square are identical.”.

Какой ужас Наверное инициализировать объект в конструкторе и оставить только методы GetWidth() и GetHeight() не позволяет религия
... << RSDN@Home 1.1.4 beta 7 rev. 0>>
Re: Задания на собеседовании.
От: CheekyStink Россия  
Дата: 08.09.05 16:47
Оценка:
Ох, как же я тебя понимаю, особенно, когда интервьюер сидит у тебя над душой, тут вообще полметра амплитуда
Re[5]: квадратики
От: LuciferMoscow Россия  
Дата: 08.09.05 18:19
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, ilya_ny, Вы писали:


_>>Здравствуйте, LuciferMoscow, Вы писали:

LM>>>Он прав. Возврат ссылки на локальную переменную.
_>>вот это он так подковырнуть хотел. на что я ответи, что в самом тьупом случае можно завести глобалную переменную и возвращать ссылку на нее... и все работать будет — цель достигнута
LM>multithreading.
ilya_ny, Вы поняли, что Ваш хак летит в трам-тарары?
Re: Задания на собеседовании.
От: aik Австралия  
Дата: 09.09.05 06:05
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

SZI> В скором времени собираюсь менять место работы, а значит, таскаться по собеседованиям. Собеседований, как таковых, я не боюсь, т.к. уверен в своих знаниях, но вот когда мне говорят фразу типа: "вот вам небольшое задание, вы должны его сделать за пол часа", кисти моих рук начинают колебаться с амплитудой 5-10см, не зависимо от сложности задания. И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) . Это для меня самое страшное на собеседовании!!!


Выпей полбаночки пивка перед собеседованием
Пей новопассит, валерьянку, ходи почаще на собеседования, перестань циклиться на том что "если сюда не возьмут — повешусь".

SZI> Так вот собственно вопрос...не будет ли не корректным с моей стороны попросить пройти этот этап собеседования каким-нибудь другим путём? Если это допустимо, то что можно предложить в замен?


Будет некорректным. В замен — другая контора с другими подходами.

SZI> ЗЫ Два раза я напарывался на это, причём оба раза провалился с крахом!!! А после одного из них, я настолько, извините за выражение, "обделался", что даже не смог вспомнить, что вызов метода через IDispatch::Invoke называется поздним связыванием!!!


Это фигня, я и сейчас не знаю этого термина. Хотя и знаю как эта штука работает.
Re[11]: квадратики
От: Me_ Россия  
Дата: 09.09.05 06:09
Оценка:
Здравствуйте, Ulin, Вы писали:

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


U>Даже если он не имеет этих методов на момент постановки задачи, никто не может поручится, что эти методы не будут добавлены впоследствие в процессе поддержки. И тогда это нарушение LSP аукнется весьма пренеприятнейшими багами, и, возможно, весьма дорогой к тому моменту, переделкой всей иерархии...


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

Вот например у нас есть множество видов бойцовских собак. Предназначенных именно для драк, не для чего-либо еще. Мы с чистой совестью создаем базовый класс пса, имеющего определенный набор характеристик, касающихся именно драк, наследуем от нее разные породы: овчарки, боксеры и тп. И тут кому-то в голову приходит добавить в базовый класс функцию "повилять хвостом", к scope-у нашей задачи совершенно не относящейся, а у боксера хвоста нет. Всё, получается, наша иерархия не отвечает новым требованиям, нужно все переделывать.
Re[5]: квадратики
От: execve  
Дата: 09.09.05 06:27
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Если так, то отрыв рук — самое мягкое что следует делать за такое. += и + разные вещи, а человек,который будет сопровождать ЭТО должен догадыватся, что какой-то "умник" ТАК переопределил +


operator+ совсем не обязан иметь семантику "оператор сложения".
Вспомни про operator<< для потоков, который возвращает неконстантную ссылку.
Re[5]: квадратики
От: execve  
Дата: 09.09.05 06:29
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, ilya_ny, Вы писали:


_>>Здравствуйте, LuciferMoscow, Вы писали:

LM>>>Он прав. Возврат ссылки на локальную переменную.
_>>вот это он так подковырнуть хотел. на что я ответи, что в самом тьупом случае можно завести глобалную переменную и возвращать ссылку на нее... и все работать будет — цель достигнута
LM>multithreading.

TLS.
Re[3]: Задания на собеседовании.
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 09.09.05 06:32
Оценка: +1 :)
Здравствуйте, Sh1ZoID, Вы писали:

SZI>Здравствуйте, Козьма Прутков, Вы писали:


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

SZI> Только вот как заставить понять это моё подсознание?!?! Йога?

Достигается упражнениями...
Re[5]: квадратики
От: LuciferMoscow Россия  
Дата: 09.09.05 06:44
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, Me_, Вы писали:


Me_>>Здравствуйте, LuciferMoscow, Вы писали:


_>>>>4. есть ли тут ошибка:

_>>>>
_>>>>class A{
_>>>>public:
_>>>>  A& operator+ (A a);
_>>>>};
_>>>>

_>>>>я говорю, что нету, что компилироваться будет.
_>>>>он говорит, ок, компилироваться будет, а работать не будет
_>>>>я говорю, что можно и так сделать, что работать будет.. а он НЕТ НЕТ НЕТ...
LM>>>Он прав. Возврат ссылки на локальную переменную.
Me_>>Так возвратит же this, и все работать будет. Или я уже совсем си++ забыл?
LM>Если так, то отрыв рук — самое мягкое что следует делать за такое. += и + разные вещи, а человек,который будет сопровождать ЭТО должен догадыватся, что какой-то "умник" ТАК переопределил +
execve, с чем Вы не согласны?
Re[6]: квадратики
От: LuciferMoscow Россия  
Дата: 09.09.05 06:47
Оценка:
Здравствуйте, execve, Вы писали:

E>Здравствуйте, LuciferMoscow, Вы писали:


LM>>Если так, то отрыв рук — самое мягкое что следует делать за такое. += и + разные вещи, а человек,который будет сопровождать ЭТО должен догадыватся, что какой-то "умник" ТАК переопределил +


E>operator+ совсем не обязан иметь семантику "оператор сложения".

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

P.S. Ссылку на книгу Саттера и Александреску давать надо?
Re: Задания на собеседовании.
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 09.09.05 06:48
Оценка: 6 (1) :)
Здравствуйте, Sh1ZoID, Вы писали:

SZI> ЗЫ Два раза я напарывался на это, причём оба раза провалился с крахом!!! А после одного из них, я настолько, извините за выражение, "обделался", что даже не смог вспомнить, что вызов метода через IDispatch::Invoke называется поздним связыванием!!!


Зачем ты приходишь на собеседование? С людьми поговорить, себя показали. Не взяли тебя --- им же хуже.

С тобой происходят не самые страшные вещи, история знает примеры и пострашнее.

Мне кажется надо начать делать по психологической устойчивости:
1. Занятся спортом, в котором надо принимать решение за доли секунды (игровые виды подойдут)
2. Шахматы (блиц)
3. Преферанс на деньги (руки задрожали будто кур я воровал, будто сел играть я в самый первый --- похоже, да?)
4... (думаю понятно что я имею в виду)

В целом владение собой это это очень полезное качество по жизни и на работе, и оно также может оценивается на собеседовании.
Re[7]: квадратики
От: execve  
Дата: 09.09.05 06:54
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

E>>operator+ совсем не обязан иметь семантику "оператор сложения".

E>>Вспомни про operator<< для потоков, который возвращает неконстантную ссылку.
LM>Не обязательно, но скорее всего человек сопровождающий код будет надеятся на некоторое поведение данного оператора.

Точно так же, как и для operator<<

LM>Верю, что ты можешь привести пример, когда это не так.


nonstd::cout + "Hello, world" + nonstd::endl;


LM>P.S. Ссылку на книгу Саттера и Александреску давать надо?


Конечно. Желательно на введение или на содержание.
P.S. Ссылку на что именно?
Re: Задания на собеседовании.
От: Joker3D Россия http://blog.trunin.com
Дата: 09.09.05 09:13
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

SZI> В скором времени собираюсь менять место работы, а значит, таскаться по собеседованиям. Собеседований, как таковых, я не боюсь, т.к. уверен в своих знаниях, но вот когда мне говорят фразу типа: "вот вам небольшое задание, вы должны его сделать за пол часа", кисти моих рук начинают колебаться с амплитудой 5-10см, не зависимо от сложности задания. И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) . Это для меня самое страшное на собеседовании!!! Так вот собственно вопрос...не будет ли не корректным с моей стороны попросить пройти этот этап собеседования каким-нибудь другим путём? Если это допустимо, то что можно предложить в замен?


SZI> ЗЫ Два раза я напарывался на это, причём оба раза провалился с крахом!!! А после одного из них, я настолько, извините за выражение, "обделался", что даже не смог вспомнить, что вызов метода через IDispatch::Invoke называется поздним связыванием!!!


Не волнуйся!
Через 2-3 собеседования у тебя это пройдет
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re[6]: квадратики
От: fomiha  
Дата: 09.09.05 09:20
Оценка:
Здравствуйте, Alexey_ch, Вы писали:

A_>ООП должен облегчать жизнь программисту, не так ли?


A_>Допустим, нам нужно нарисовать квадрат и прямоугольник на экране. Для этого создадим метод Draw().

A_>Т.к. фигуры двухмерные, то нам прийдется использовать длину и ширину в обоих случаях, но для квадрата это будет одно и то же значение. Теперь вопрос: что должно быть базовым классом, если мы не хотим писать код Draw() дважды (вынос кода Draw() в функтор будем считать наглым читерством, т.к. для общего случая на входе будет длина и ширина раздельно)?

Считаю что метод draw должен быть виртуальным и принадлежать абстрактному классу (что-то типа Фигура) от которого должен наследоваться квадрат, но никак не квадрату. И каждый класс должен его сам реализовывать. Да и цель этой иерархии может быть вовсе не в рисовании. И при появлении новых фигур так удобнее (напр. добавляем параллелограмм — наследуем от прямоугольника с добавлением свойства "угол между сторонам").

A_>P.S. Квадрат нельзя описать одним свойством, т.к. без знания, что с этим свойством делать, квадрат не нарисуется И это знание как раз заключено в методе Draw().


почему нельзя ))
свойство одно — длина стороны
а методов сколько хошь можно напридумать ))
Re[7]: квадратики
От: Alexey_ch Швейцария  
Дата: 09.09.05 09:52
Оценка:
Здравствуйте, fomiha, Вы писали:

F>Считаю что метод draw должен быть виртуальным и принадлежать абстрактному классу (что-то типа Фигура)

+1, но мы уходим от первоначального вопроса, а там только квадрат и прямоугольник.

F>от которого должен наследоваться квадрат, но никак не квадрату.

Даже если оба класса унаследованы от абстрактной Фигуры с виртуальным Draw(), можно не писать код рисования дважды, унаследовав квадрат от прямоугольника.

A_>>P.S. Квадрат нельзя описать одним свойством, т.к. без знания, что с этим свойством делать, квадрат не нарисуется И это знание как раз заключено в методе Draw().

F>почему нельзя ))
F>свойство одно — длина стороны
Потому что следуя такой логике можно унаследовать прямоугольник от круга У него тоже "одно свойство".
... << RSDN@Home 1.1.4 beta 7 rev. 0>>
Re[8]: квадратики
От: LuciferMoscow Россия  
Дата: 09.09.05 10:09
Оценка:
Здравствуйте, execve, Вы писали:

E>Здравствуйте, LuciferMoscow, Вы писали:


E>>>operator+ совсем не обязан иметь семантику "оператор сложения".

E>>>Вспомни про operator<< для потоков, который возвращает неконстантную ссылку.
LM>>Не обязательно, но скорее всего человек сопровождающий код будет надеятся на некоторое поведение данного оператора.

E>Точно так же, как и для operator<<


LM>>Верю, что ты можешь привести пример, когда это не так.

E>
E>nonstd::cout + "Hello, world" + nonstd::endl;
E>

Пример плохой. И не по теме. Там был Something T::opearator+(const T&)

LM>>P.S. Ссылку на книгу Саттера и Александреску давать надо?

E>Конечно. Желательно на введение или на содержание.
E>P.S. Ссылку на что именно?
http://www.ozon.ru/context/detail/id/2381848/
Buy and read
Re[8]: квадратики
От: fomiha  
Дата: 09.09.05 10:27
Оценка:
Здравствуйте, Alexey_ch, Вы писали:

A_>Здравствуйте, fomiha, Вы писали:


F>>от которого должен наследоваться квадрат, но никак не квадрату.

A_>Даже если оба класса унаследованы от абстрактной Фигуры с виртуальным Draw(), можно не писать код рисования дважды, унаследовав квадрат от прямоугольника.
И какую смысловую нагрузку будет нести класс квадрат (тогда он будет просто частный случай прямоугольника)
если у него нет отличий от прямоугольника в таком случае?

A_>>>P.S. Квадрат нельзя описать одним свойством, т.к. без знания, что с этим свойством делать, квадрат не нарисуется И это знание как раз заключено в методе Draw().

F>>почему нельзя ))
F>>свойство одно — длина стороны
A_>Потому что следуя такой логике можно унаследовать прямоугольник от круга У него тоже "одно свойство".
да можно от чего угодно с одним свойством )) — если того потребуют условия задачи, главное знать контекст (зачем вообще эта иерархия нужна)
да и еще как понимать эти фигуры (ведь их можно понимать как массив длин сторон и массив углов — тогда иерархия вообще бессмысленна, а можно идти от простого к сложному)
Re[6]: квадратики
От: ilya_ny  
Дата: 09.09.05 11:31
Оценка: :)
Здравствуйте, LuciferMoscow, Вы писали:

LM>>>>Он прав. Возврат ссылки на локальную переменную.

_>>>вот это он так подковырнуть хотел. на что я ответи, что в самом тьупом случае можно завести глобалную переменную и возвращать ссылку на нее... и все работать будет — цель достигнута
LM>>multithreading.
LM>ilya_ny, Вы поняли, что Ваш хак летит в трам-тарары?

не
в том вопросе главное чтобы не валилось. а логика не втором месте
Re[9]: квадратики
От: Alexey_ch Швейцария  
Дата: 09.09.05 12:14
Оценка:
Здравствуйте, fomiha, Вы писали:
F>>>от которого должен наследоваться квадрат, но никак не квадрату.
A_>>Даже если оба класса унаследованы от абстрактной Фигуры с виртуальным Draw(), можно не писать код рисования дважды, унаследовав квадрат от прямоугольника.
F>И какую смысловую нагрузку будет нести класс квадрат (тогда он будет просто частный случай прямоугольника)
F>если у него нет отличий от прямоугольника в таком случае?
Чего-нибудь уникальное именно для квадрата . Например, вычисление диаметра вписанной окружности
GetInscreibedCircleDiameter() {return m_nWidth;}


Плюс, если инициализация оъекта производится в конструкторе, то у квадрата всегда будет одинаковая длина и ширина.
class Square : public Rectangle
{
public:
    Square (int nSide) : Rectangle(nSide, nSide) {};
}
... << RSDN@Home 1.1.4 beta 7 rev. 0>>
Re[9]: квадратики
От: Aptekar Россия  
Дата: 09.09.05 12:27
Оценка: +1
Здравствуйте, Ulin, Вы писали:
U>Цитата из вышеприведенной статьи:
Точно на тех же основаниях и прямоугольник нельзя наследовать от квадрата.
Re[10]: квадратики
От: fomiha  
Дата: 09.09.05 13:07
Оценка:
Здравствуйте, Alexey_ch, Вы писали:

AA_>Чего-нибудь уникальное именно для квадрата . Например, вычисление диаметра вписанной окружности

A_>
A_>GetInscreibedCircleDiameter() {return m_nWidth;}
A_>


что тут уникального — вписанная в квадрат окружность — частный случай вписанного в прямоугольник овала ))
Re: Задания на собеседовании.
От: karkadil  
Дата: 09.09.05 15:01
Оценка: :))
Здравствуйте, Sh1ZoID, Вы писали:

SZI> И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) .



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

Главное, конечно, заставить туда прийти в принципе.

ЗЫ Это не шутка, мне действительно помогало.
Re[8]: квадратики
От: LuciferMoscow Россия  
Дата: 12.09.05 18:28
Оценка: 1 (1) +1
Отвечаю на последнее сообщение, не видя корней(лень искать) спора о квадрате и прямоугольнике.

Ссылаюсь на книгу Саттер,Александреску "Стандарты программирования на С++".
Совет 37:

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

scipped

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


P.S. Цитата переврана, но надеюсь смысл сохранил: "Наследующий класс обязан сохранять инварианты наследуемого"
Re[6]: квадратики
От: GarryIV  
Дата: 12.09.05 21:02
Оценка: 2 (1) -1
Здравствуйте, Me_, Вы писали:

F>>...

F>>No! A square might be a rectangle, but a Square object is definitely not a Rectangle
F>>object. Why? Because the behavior of a Square object is not consistent with the
F>>behavior of a Rectangle object. Behaviorally, a Square is not a Rectangle! And it
F>>is behavior that software is really all about.
F>>...

Me_>А вот про поведение ничего сказано не было на собеседовании. Если основываться только на формах — то наследование прямоугольник->квадрат — абсолютно правильно.


Этот случай про квадрат и прямоугольник настолько популярен в литературе посвященной ООП что незнание этого вопроса наталкивает на мысль что ни одной книжки о ООП Вы не читали и что эта тема Вас мало интересует а следовательно уровень Ваших знаний в области ООП недостаточен. Ваши посты только убедили меня в этом мнении.
WBR, Igor Evgrafov
Re[2]: Задания на собеседовании.
От: CreatorCray  
Дата: 13.09.05 04:35
Оценка:
Здравствуйте, karkadil, Вы писали:

K>Я перед собеседованиями напиваюсь.

K>Утром — похмелье, голова болит, кружится, тошнит...
Ну и как? Взяли?
И как интервьюеры к такому состоянию относятся?
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Задания на собеседовании.
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 13.09.05 06:12
Оценка:
Здравствуйте, karkadil, Вы писали:

K>Здравствуйте, Sh1ZoID, Вы писали:


SZI>> И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) .



K>Эээ, не знаю, насколько мой метод подойдет...

K>Я перед собеседованиями напиваюсь.
K>Утром — похмелье, голова болит, кружится, тошнит...
K>Приходишь на собеседование и просто не можешь нервничать... Так как сознание полностью сконцентрировано на состоянии, то ответы приходят откуда-то из подсознания.

K>Главное, конечно, заставить туда прийти в принципе.


K>ЗЫ Это не шутка, мне действительно помогало.


Только вот руки в два раза сильней трестись будут

ЗЫ Нет, спасибо, конечно, за совет, вот только в таком состоянии всё будет только хуже(фор ми)
Re[7]: квадратики
От: LuciferMoscow Россия  
Дата: 13.09.05 06:15
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте, GarryIV, Вы писали:

GIV>Этот случай про квадрат и прямоугольник настолько популярен в литературе посвященной ООП что незнание этого вопроса наталкивает на мысль что ни одной книжки о ООП Вы не читали и что эта тема Вас мало интересует а следовательно уровень Ваших знаний в области ООП недостаточен. Ваши посты только убедили меня в этом мнении.


Знаете, я немало читал книг. Просто данный пример не встечал. А судить по тому, что "Ты не знаешь, какой функцие пишется в реестр","Чем отличается квадрат от прямоугольника" это
Re[3]: Задания на собеседовании.
От: LuciferMoscow Россия  
Дата: 13.09.05 06:17
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, karkadil, Вы писали:


K>>Я перед собеседованиями напиваюсь.

K>>Утром — похмелье, голова болит, кружится, тошнит...
CC>Ну и как? Взяли?
CC>И как интервьюеры к такому состоянию относятся?
Я один раз проходил собеседование в таком состояние. Самое сложное было говорить(пить очень хотелось). Никому не рекомендую

P.S. Мне сделали предлдожения
p.S.S. Я предпочел более выгодное
[от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 13.09.05 06:31
Оценка:
Строгое предупреждение за нарушение п.5 обязательных правил — "Оскорблять и обзывать собеседника, ставить под сомнение его профессиональную квалификацию, придираться к его нику, указывать на орфографические и синтаксические ошибки и т.д. запрещается."
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by Iron Maiden — Dance Of Death ]
- Искренне ваш, Поросенок Пафнутий
[от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 13.09.05 06:32
Оценка:
Строгое предупреждение за оверквотинг.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by Iron Maiden — Dance Of Death ]
- Искренне ваш, Поросенок Пафнутий
Re: [от модератора]
От: LuciferMoscow Россия  
Дата: 13.09.05 07:03
Оценка: -1
Здравствуйте, SchweinDeBurg, Вы писали:

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

Тогда может обоим по рогам надо?
GarryIV за то, что подставил под сомнение профессионализм автора темы как программиста, а мне за точно сделал тоже замое в отношение GarryIV как интервьюера?

Строгое предупреждение за оверквотинг.

Так может сделаем нормальный движок, который не провоцирует на оверквотинг?
А так: гадить на улице запретили, а туалеты все позакрывали. Вот и думай: либо в штаны нагадить, либо на зону попасть
Re[2]: [от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 13.09.05 07:12
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Так может сделаем нормальный движок, который не провоцирует на оверквотинг?


Какой способ цитирования "отвечаемого" сообщения вы предпочитаете?
Автор: SchweinDeBurg
Дата: 25.08.05
Вопрос: Какой способ цитирования "отвечаемого" сообщения вы предпочитаете?


Re[4]: Дополнение
Автор: SchweinDeBurg
Дата: 25.08.05
(ну и вся ветка to SchweinDeBurg по поводу оверквотинга
Автор: execve
Дата: 25.08.05
).

P.S.
Отвечать на сообщения "[от модератора]" нужно по адресу moderator@rsdn.ru
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by Iron Maiden — Paschendale ]
- Искренне ваш, Поросенок Пафнутий
Re[2]: [от модератора]
От: Dog  
Дата: 13.09.05 07:52
Оценка: :)
LM>

LM>Строгое предупреждение за оверквотинг.

LM>Так может сделаем нормальный движок, который не провоцирует на оверквотинг?
Присоединяйтесь
...где-то между собакой и богом...
Re[3]: [от модератора]
От: LuciferMoscow Россия  
Дата: 13.09.05 07:56
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, LuciferMoscow, Вы писали:


LM>>Так может сделаем нормальный движок, который не провоцирует на оверквотинг?


SDB>Какой способ цитирования "отвечаемого" сообщения вы предпочитаете?
Автор: SchweinDeBurg
Дата: 25.08.05
Вопрос: Какой способ цитирования "отвечаемого" сообщения вы предпочитаете?


SDB>Re[4]: Дополнение
Автор: SchweinDeBurg
Дата: 25.08.05
(ну и вся ветка to SchweinDeBurg по поводу оверквотинга
Автор: execve
Дата: 25.08.05
).


SDB>P.S.

SDB>Отвечать на сообщения "[от модератора]" нужно по адресу moderator@rsdn.ru
Я там и отвечал и голосовал.
Re[9]: квадратики
От: Alexey_ch Швейцария  
Дата: 13.09.05 08:06
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:
LM>

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

Мысль не осилил

LM>

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

Значит, например, виртуальная CWnd::WndProc() это чистое зло Сам CWnd не знает, что там происходит.
Мне кажется, что Александреску пережевывает надуманную проблему. SetWidth() может быть объявлена как private. И почему клиенты класса Прямоугольник должны возводить GetWidth() в квадрат? Во-первых они знают, что это прямоугольник, а не квадрат. И если очень хочется работать с этими классами через единый интерфейс, то никто не мешает написать базовую виртуальную 2DShape::GetArea()

LM>P.S. Цитата переврана, но надеюсь смысл сохранил: "Наследующий класс обязан сохранять инварианты наследуемого"

А каждая база данных должна быть нормализована И еще мир во всем мире...
... << RSDN@Home 1.1.4 beta 7 rev. 0>>
Re[7]: квадратики
От: Me_ Россия  
Дата: 13.09.05 11:52
Оценка:
Здравствуйте, GarryIV, Вы писали:

Me_>>А вот про поведение ничего сказано не было на собеседовании. Если основываться только на формах — то наследование прямоугольник->квадрат — абсолютно правильно.


GIV>Этот случай про квадрат и прямоугольник настолько популярен в литературе посвященной ООП что незнание этого вопроса наталкивает на мысль что ни одной книжки о ООП Вы не читали и что эта тема Вас мало интересует а следовательно уровень Ваших знаний в области ООП недостаточен. Ваши посты только убедили меня в этом мнении.


Вы не поверите, но мне глубоко безразлично ваше мнение о моем профессиональном уровне. Тем более когда его высказывает кто-то, не приводящий в ответ конструктив, а просто высказывающий свое имхо как нечто, не подвергающееся какой-либо критике.
Стыдно должно быть за такой детский сад.
[от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 13.09.05 11:58
Оценка:
Настоятельно предлагается либо прекратить дискуссию, либо вести ее в более конструктивном ключе. В противном случае все нарушители обязательных правил будут награждаться временным ограничением свобод на форумах RSDN.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by Iron Maiden — Run To The Hills ]
- Искренне ваш, Поросенок Пафнутий
Re[10]: квадратики
От: LuciferMoscow Россия  
Дата: 13.09.05 13:26
Оценка:
Здравствуйте, Alexey_ch, Вы писали:

A_>Здравствуйте, LuciferMoscow, Вы писали:

LM>>

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

A_> Мысль не осилил
Попытаюсь пояснить.
X: public Y нужно не для того, чтобы использовать методы Y в X, а для того, чтобы

Y* pY=new X;
// Далее клиент не знает, что он общается с Х, он думает, что он общается с У.


A_>Значит, например, виртуальная CWnd::WndProc() это чистое зло Сам CWnd не знает, что там происходит.

Приводится пример исключения: Саттер и Александреску называют это "классами стратегий". Насколько я понял, мне данное знакомо под другим названием(Шаблонный метод).

A_>Мне кажется, что Александреску пережевывает надуманную проблему. SetWidth() может быть объявлена как private.

У прямоугольника?

A_>И почему клиенты класса Прямоугольник должны возводить GetWidth() в квадрат? Во-первых они знают, что это прямоугольник, а не квадрат.

Они могут не знать о том, что это прямоугольник!
void f(Y* pY);

Y* pY=new X;
f(pY);

void f(Y* pY)
{
  // на что мы получили уазатель? На Х? На У?
}



LM>>P.S. Цитата переврана, но надеюсь смысл сохранил: "Наследующий класс обязан сохранять инварианты наследуемого"

A_>А каждая база данных должна быть нормализована И еще мир во всем мире...
Денормализация базы вполне допустима для ускорения.
Re[11]: квадратики
От: Alexey_ch Швейцария  
Дата: 13.09.05 15:13
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>X: public Y нужно не для того, чтобы использовать методы Y в X, а для того, чтобы

LM>
LM>Y* pY=new X;
LM>// Далее клиент не знает, что он общается с Х, он думает, что он общается с У.
LM>

Если бы X: public Y было нужно только для этого, то переопределение невиртуальных функций было бы запрещено. В данном примере мы не можем переопределить поведение методов класса Y, какой тогда смысл в наследовании?

A_>>Мне кажется, что Александреску пережевывает надуманную проблему. SetWidth() может быть объявлена как private.

LM>У прямоугольника?
Именно, т.к. она совсем не нужна дальше в иерархии наследования.
Также можно ее скрыть в классе Квадрат.
class Rectangle
{
public:
    void SetWidth()
    {
    }
};

class Square : public Rectangle
{
private:
    void SetWidth()
    {
    }
};


int main(int argc, char* argv[])
{
    Square s; // никаких Rectangle* r = new Square()
    s.SetWidth(); // ошибка

    return 0;
}


A_>>И почему клиенты класса Прямоугольник должны возводить GetWidth() в квадрат? Во-первых они знают, что это прямоугольник, а не квадрат.

LM>Они могут не знать о том, что это прямоугольник!
Для этого и существуют виртуальные функции. Базовый класс вызывает имплементацию потомка, который в свою очередь знает, кто он такой. Т.е. должна быть вызвана виртуальная функция для вычисления площади.

LM>>>P.S. Цитата переврана, но надеюсь смысл сохранил: "Наследующий класс обязан сохранять инварианты наследуемого"

A_>>А каждая база данных должна быть нормализована И еще мир во всем мире...
LM>Денормализация базы вполне допустима для ускорения.
Это я к тому, что не надо никогда не наследовать квадрат от прямоугольника, потому что какой-то мужик написал в книге, что это плохо.
... << RSDN@Home 1.1.4 beta 7 rev. 0>>
Re[12]: квадратики
От: LuciferMoscow Россия  
Дата: 13.09.05 17:15
Оценка:
Здравствуйте, Alexey_ch, Вы писали:

A_>Здравствуйте, LuciferMoscow, Вы писали:


LM>>X: public Y нужно не для того, чтобы использовать методы Y в X, а для того, чтобы

LM>>
LM>>Y* pY=new X;
LM>>// Далее клиент не знает, что он общается с Х, он думает, что он общается с У.
LM>>

A_>Если бы X: public Y было нужно только для этого, то переопределение невиртуальных функций было бы запрещено. В данном примере мы не можем переопределить поведение методов класса Y, какой тогда смысл в наследовании?
Вообще-то переопределение НЕвиртуальных функций считается дурным тоном. Не запрещено это, возможно, из-за back-совместимости. Запрещеть, что либо в стандарте в принципе не любят. Обычный путь для этого выглядит так:
— в версии Х есть ФИШКА
— в версии У не рекомендуется использовать ФИШКУ
....(обрати внимание на многоточие)
-в версии ZZZZ ФИШКА запрещена.

A_>>>Мне кажется, что Александреску пережевывает надуманную проблему. SetWidth() может быть объявлена как private.

LM>>У прямоугольника?
A_>Именно, т.к. она совсем не нужна дальше в иерархии наследования.
A_>Также можно ее скрыть в классе Квадрат.
A_>
A_>class Rectangle
A_>{
A_>public:
A_>    void SetWidth()
A_>    {
A_>    }
A_>};
Я клиент класса прямоугольник. Как мне измениить ширину? Скрыть? Замечательно. Нарушаем другой инвариант:
[ccode]
CRect* pRect=CreateX(...);
int Size=10;
pRect->SetWigth(Size);
ASSERT( Size == pRect->GetWigth() );


LM>>>>P.S. Цитата переврана, но надеюсь смысл сохранил: "Наследующий класс обязан сохранять инварианты наследуемого"

A_>>>А каждая база данных должна быть нормализована И еще мир во всем мире...
LM>>Денормализация базы вполне допустима для ускорения.
A_>Это я к тому, что не надо никогда не наследовать квадрат от прямоугольника, потому что какой-то мужик написал в книге, что это плохо.
Какой-то мужик? Я бы прислушался к мнению "этого мужика"
Re[9]: квадратики
От: Joker3D Россия http://blog.trunin.com
Дата: 14.09.05 09:42
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>

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


LM>P.S. Цитата переврана, но надеюсь смысл сохранил: "Наследующий класс обязан сохранять инварианты наследуемого"


А почему бы не сделать так:
1. пронаследовать квадрат от прямоугольника
2. переопререлить виртуальные функции SetWidth/Height, чтобы при изменении одной стороны вторая автоматически становилась ей равной.

Кстати, при работе в Visio и других редакторах визуально так всегда и происходит.

PS. А еще лучше оставить невиртуальные SetWidth/Height в каком-нибудь базовом для всех классе Shape и дергать оттуда виртуальные protected virtual OnSetWidth/Height. А в Square их переопределить.
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re[6]: квадратики
От: _Obelisk_ Россия http://www.ibm.com
Дата: 14.09.05 12:39
Оценка:
Здравствуйте, Me_, Вы писали:

Me_>А вот про поведение ничего сказано не было на собеседовании. Если основываться только на формах — то наследование прямоугольник->квадрат — абсолютно правильно.


Imho, наследование здесь вообще излишне. Достаточно добавить метод IsSquare() в класс прямоугольника.



Душа обязана трудиться! (с) Н.Заболоцкий.
Re[2]: квадратики
От: Трурль  
Дата: 14.09.05 13:18
Оценка:
Здравствуйте, ilya_ny, Вы писали:

_>собеседование.. 3 мужика

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

А я бы попросил этого художника изменить длину стороны у нарисованного квадратика, дабы продемонстрировать нарушения LSP. Интересно, как бы у него получилось?
Re[2]: Задания на собеседовании.
От: MaximVK Россия  
Дата: 14.09.05 16:47
Оценка:
Здравствуйте, Mystic, Вы писали:

M>С тобой происходят не самые страшные вещи, история знает примеры и пострашнее.


Спасибо! Давно я так не смеялся
Re[10]: квадратики
От: LuciferMoscow Россия  
Дата: 14.09.05 20:51
Оценка:
Здравствуйте, Joker3D, Вы писали:

JD>Здравствуйте, LuciferMoscow, Вы писали:


JD>А почему бы не сделать так:

JD>1. пронаследовать квадрат от прямоугольника
JD>2. переопререлить виртуальные функции SetWidth/Height, чтобы при изменении одной стороны вторая автоматически становилась ей равной.
В базовом классе? Методы SetWight,SetHeight для круга и треугольника ты тоже переопределять будешь?

JD>Кстати, при работе в Visio и других редакторах визуально так всегда и происходит.

JD>PS. А еще лучше оставить невиртуальные SetWidth/Height в каком-нибудь базовом для всех классе Shape и дергать оттуда виртуальные protected virtual OnSetWidth/Height. А в Square их переопределить.
См. выше.
Re[11]: квадратики
От: Joker3D Россия http://blog.trunin.com
Дата: 15.09.05 08:03
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>Здравствуйте, Joker3D, Вы писали:


JD>>Здравствуйте, LuciferMoscow, Вы писали:


JD>>А почему бы не сделать так:

JD>>1. пронаследовать квадрат от прямоугольника
JD>>2. переопререлить виртуальные функции SetWidth/Height, чтобы при изменении одной стороны вторая автоматически становилась ей равной.
LM>В базовом классе? Методы SetWight,SetHeight для круга и треугольника ты тоже переопределять будешь?
Посмотри Visio.
Там и у треугольника и у круга есть Width и Height. А специфические свойства — типа радиуса уже есть только у круга. Эти специфические свойства вычислимые от Width/Height!
Я когда-то разрабатывал свой аналог визио и именно так все и реализовал — и получилось очень удобно.

Выдели в Visio какую-нибудь фигуру и посмотри: Window->Show ShapeSheet.

JD>>Кстати, при работе в Visio и других редакторах визуально так всегда и происходит.

JD>>PS. А еще лучше оставить невиртуальные SetWidth/Height в каком-нибудь базовом для всех классе Shape и дергать оттуда виртуальные protected virtual OnSetWidth/Height. А в Square их переопределить.
LM>См. выше.
См. выше.
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re[9]: квадратики
От: Joker3D Россия http://blog.trunin.com
Дата: 15.09.05 08:34
Оценка:
Здравствуйте, Ulin, Вы писали:

U>

U>At this point in time we have two classes, Square and Rectangle, that appear to work.
U>No matter what you do to a Square object, it will remain consistent with a mathematical
U>square. And regardless of what you do to a Rectangle object, it will remain a mathe-
U>matical rectangle. Moreover, you can pass a Square into a function that accepts a pointer
U>or reference to a Rectangle, and the Square will still act like a square and will remain
U>consistent.
U>Thus, we might conclude that the model is now self consistent, and correct. However,
U>this conclusion would be amiss. A model that is self consistent is not necessarily consis-
U>tent with all its users! Consider function g below.
U>void g(Rectangle& r)
U>{
U>r.SetWidth(5);
U>r.SetHeight(4);
U>assert(r.GetWidth() * r.GetHeight()) == 20);
U>}
U>This function invokes the SetWidth and SetHeight members of what it believes
U>to be a Rectangle. The function works just fine for a Rectangle, but declares an
U>assertion error if passed a Square. So here is the real problem: Was the programmer who
U>wrote that function justified in assuming that changing the width of a Rectangle leaves
U>its height unchanged?
U>Clearly, the programmer of g made this very reasonable assumption. Passing a
U>Square to functions whose programmers made this assumption will result in problems.
U>Therefore, there exist functions that take pointers or references to Rectangle objects,


Пример хороший!
Он вроде как доказывает что нельзя Square наследовать от Rectanle.
А давайте еще подумаем. Если я создам какой-нибудь SmartRectangle производный от Rectangle и его смартовость будет заключаться в том что:
— он, например, умеет липнуть к сетке, корректируя при этом свои размеры (такое бывает и это можно реализовать именно внутри SmartRectangle),
— или, например, его размер зависит от заключенного в нем текста (часто очень полезная фишка)
В обоих этих случаях у меня в функции g() возникнет ассерт!
Значит ли это что я и никакой SmartRectangle не могу наследовать от Rectangle? Так можно прийти к тому что ВСЕ объекты ни будут ни от кого наследоваться....

Я, думаю, что просто следует определиться заранее со свойствами и со стратегией поведения. И уже от этого и плясать.
И если вам важно чтобы выполнялся тест-кейс g(), то тогда да! Нельзя наследовать.
А если у вас есть другие требования, и на тест-кейс g() вам наплевать, то наследуйте как хотите и от чего хотите.

См. http://www.rsdn.ru/Forum/Message.aspx?mid=1381652&amp;only=1
Автор: Joker3D
Дата: 14.09.05


IMHO, главное в проекте — это его успешность. А если тебе для успешности, ускорения разработки, удобства пользования или чего-то еще удобно пронаследовать попугая от крокодила — флаг тебе в руки.
(Только не забудь это задокументировать чтобы потом биологи не ломали голову почему их тест-кейсы валятся )
Konstantin Trunin
http://blog.trunin.com — эффективное управление людьми, проектами, собой
Re[5]: квадратики и ООП
От: gribunin Россия  
Дата: 16.09.05 13:26
Оценка: 2 (2) +1 -1
F>то что прямоугольник порожден от квадрата следует из того, что квадрат можно описать одним свойством
F>длина его стороны(a), а у прямоугольника появляется новое свойство — длина другой стороны (в). Итого прямоугольник наследуется от квадрата с появлением дополнительного своего свойства.

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

Плюсы такого наследования по сравнению с наследованием наоборот (прямоугольник от квадрата) очевидны. Например, реализация методов рисования фигуры, вычисления площади и т.п. В случае, когда квадрат наследуется от прямоугольника, их можно реализовать только в базовом классе (прямоугольнике) и они отлично будут работать и для производного класса (квадрата). В обратном случае, придётся писать две малосвязанные реализации в обоих классах.
----------------
Кирилл Грибунин
Re[7]: квадратики
От: gribunin Россия  
Дата: 16.09.05 13:34
Оценка:
Здравствуйте, _Obelisk_, Вы писали:

_O_>Imho, наследование здесь вообще излишне. Достаточно добавить метод IsSquare() в класс прямоугольника.


Может излишне, а может и нет -- это зависит от задачи. Если мы хотим иметь объект, у которого ширина ВСЕГДА равна высоте, то мы должны либо породить соответствующий класс, либо, если пойти по пути с IsSquare(), вносить в существующий класс методы типа SetSquare().
----------------
Кирилл Грибунин
Re[6]: квадратики
От: lpvoid Россия  
Дата: 04.07.06 10:39
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

<skipped>
LM>>Если так, то отрыв рук — самое мягкое что следует делать за такое. += и + разные вещи, а человек,который будет сопровождать ЭТО должен догадыватся, что какой-то "умник" ТАК переопределил +
LM>execve, с чем Вы не согласны?
Ну вообще-то operator+ делать членом класса не есть гут, ибо при a = a + 1 будет гут, а при a = 1 + a будет совсем не гут
Re: Задания на собеседовании.
От: ArtemGorikov Австралия жж
Дата: 04.07.06 10:58
Оценка:
Рассматривай собеседование как развлечение, азартную игру. Когда попадается сильный интервьюер — это наоборот интересно, можно узнать для себя что-нибудь новое. Если стало скучно или по каким-либо причинам решил для себя, что не хочешь работать с этим человеком — можно просто извиниться и уйти.
Re[7]: квадратики
От: anton_t Россия  
Дата: 04.07.06 11:35
Оценка: +2
Здравствуйте, Me_, Вы писали:

Me_>Здравствуйте, vpedak, Вы писали:


V>>слышал конечно, но new != override. А разговор был именно про него —

V>>"типа на обычную фун-цию слово override поставить нельзя" (ваши слова).
V>>Так вот на обычную функцию слово override поставить таки нельзя. Хотя
V>>new конечно можно.

Me_>Ясно, мы не поняли друг друга.

Me_>"типа на обычную фун-цию слово override поставить нельзя" — это я как процитировал своего интервьера, т.к. про new ему скорее всего ничего известно не было.

Когда ставишь new, то функция не переопределяется, а перекрывается. И получается совсем другое поведение.
Re: Задания на собеседовании.
От: NikeByNike Россия  
Дата: 04.07.06 14:12
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

SZI> В скором времени собираюсь менять место работы, а значит, таскаться по собеседованиям. Собеседований, как таковых, я не боюсь, т.к. уверен в своих знаниях, но вот когда мне говорят фразу типа: "вот вам небольшое задание, вы должны его сделать за пол часа", кисти моих рук начинают колебаться с амплитудой 5-10см, не зависимо от сложности задания. И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) . Это для меня самое страшное на собеседовании!!! Так вот собственно вопрос...не будет ли не корректным с моей стороны попросить пройти этот этап собеседования каким-нибудь другим путём? Если это допустимо, то что можно предложить в замен?


SZI> ЗЫ Два раза я напарывался на это, причём оба раза провалился с крахом!!! А после одного из них, я настолько, извините за выражение, "обделался", что даже не смог вспомнить, что вызов метода через IDispatch::Invoke называется поздним связыванием!!!



Еще бывает сложная задача — угадать (именно угадать) какое решение от тебя хотят. Многие задачи имеют несколько решений:
например вопрос — какой недостаток у STL ты знаешь? Или лучше так: Какой ГЛАВНЫЙ недостаток у STL?
Варианты ответов сходу:
непереносимость между dll, отсутствие стратегий, распухание кода. Для меня эти недостатки идут именно в таком порядке. Для работодателя могут идти в другом — и впечатление смазывается.

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

Научишься угадывать чего от тебя ждут — не пропадешь
Нужно разобрать угил.
Re[6]: квадратики и ООП
От: mihoshi Россия  
Дата: 04.07.06 14:21
Оценка: +1
Здравствуйте, gribunin, Вы писали:

G>В общем случае, порождённый класс является частным случаем базового. Например, Круг -- частный случай двумерной фигуры, сотрудник отдела закупок -- частный случай просто сотрудника и т.п. Квадрат явно является частным случаем прямоугольника (когда ширина и высота прямоугольника равны), следовательно логично его наследовать именно от прямоугольника.


Это уже пережевывалось. Квадрат можно наследовать от прямоугольника, если класс прямоугольника не позволяет независимо менять размеры сторон, кроме как в конструкторе. В противном случае наследование нарушит принцип Лисков.
Re[7]: квадратики и ООП
От: Pyromancer  
Дата: 04.07.06 18:56
Оценка:
Здравствуйте, mihoshi, Вы писали:

M>Здравствуйте, gribunin, Вы писали:


G>>В общем случае, порождённый класс является частным случаем базового. Например, Круг -- частный случай двумерной фигуры, сотрудник отдела закупок -- частный случай просто сотрудника и т.п. Квадрат явно является частным случаем прямоугольника (когда ширина и высота прямоугольника равны), следовательно логично его наследовать именно от прямоугольника.


M>Это уже пережевывалось. Квадрат можно наследовать от прямоугольника, если класс прямоугольника не позволяет независимо менять размеры сторон, кроме как в конструкторе. В противном случае наследование нарушит принцип Лисков.


Геометрия говорит, что прямоугольник и ромб наследуют от паралеллограмма, а квадрат от прямоугольника и ромба, а значит подстраивайте своё ООП соответственно.
Даже если прямоугольник имеет раздельное изменение сторон кто мешает в квадрате оставить ширину и высоту а метод переопределить так, чтобы и второе измерение изменялась так же как то,что меняют? Или например наследовать этот метод от ромба без изменений
Re[8]: квадратики и ООП
От: mihoshi Россия  
Дата: 05.07.06 08:01
Оценка:
Здравствуйте, Pyromancer, Вы писали:

P>Геометрия говорит, что прямоугольник и ромб наследуют от паралеллограмма, а квадрат от прямоугольника и ромба, а значит подстраивайте своё ООП соответственно.


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

P>Даже если прямоугольник имеет раздельное изменение сторон кто мешает в квадрате оставить ширину и высоту а метод переопределить так, чтобы и второе измерение изменялась так же как то,что меняют? Или например наследовать этот метод от ромба без изменений


Это нарушение контракта, так как тогда метод делает не то, что предполагается. Хак, иными словами. Хотя тут тоже возможны разные интерпретации
Re[9]: квадратики и ООП
От: inko Россия  
Дата: 07.07.06 09:40
Оценка:
Здравствуйте, mihoshi, Вы писали:

P>>Даже если прямоугольник имеет раздельное изменение сторон кто мешает в квадрате оставить ширину и высоту а метод переопределить так, чтобы и второе измерение изменялась так же как то,что меняют? Или например наследовать этот метод от ромба без изменений


M>Это нарушение контракта, так как тогда метод делает не то, что предполагается. Хак, иными словами. Хотя тут тоже возможны разные интерпретации


категорически не согласен, для квадрата методы SetWidth() и SetHeight() так же будут изменять ширину и длину его сторон, тот факт, что длина==ширина никоим образом этому не противоречит
Re[5]: квадратики
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.07.06 11:35
Оценка:
Здравствуйте, fomiha, Вы писали:


Двоешники. Никто ни от кого не наследуется. Использовать поиск по сайту по словам "Why circle is not an ellipse".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: квадратики
От: Pyromancer  
Дата: 10.07.06 18:47
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, fomiha, Вы писали:



S>Двоешники. Никто ни от кого не наследуется. Использовать поиск по сайту по словам "Why circle is not an ellipse".


Сам двоеШник, у нас тут квадраты и прямоугольники только, никаких кругов с эллипсами, не говоря уж что по такому запросу даже гугель ничего не находит, а поиск сайта-только этот топик
Re: Задания на собеседовании.
От: Maxim Golov Голландия  
Дата: 14.07.06 21:25
Оценка:
Здравствуйте, Sh1ZoID, Вы писали:

SZI> В скором времени собираюсь менять место работы, а значит, таскаться по собеседованиям. Собеседований, как таковых, я не боюсь, т.к. уверен в своих знаниях, но вот когда мне говорят фразу типа: "вот вам небольшое задание, вы должны его сделать за пол часа", кисти моих рук начинают колебаться с амплитудой 5-10см, не зависимо от сложности задания. И когда я сожусь за комп, я не то, что сообразить ничего не могу, я по клавишам-то с трудом попадаю(серьёзно!) . Это для меня самое страшное на собеседовании!!! Так вот собственно вопрос...не будет ли не корректным с моей стороны попросить пройти этот этап собеседования каким-нибудь другим путём? Если это допустимо, то что можно предложить в замен?


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

Вообще собеседование — всегда диалог, а не игра в одни ворота, не надо бояться предлагать более эффективные решения
Re[2]: Задания на собеседовании.
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 16.07.06 12:06
Оценка: 2 (1)
Здравствуйте, Maxim Golov, Вы писали:

MG>Трудная ситуация, я бы предложил такой вариант ответа: "Вы знаете, я заметил, что сильно волнуюсь при выполнении таких упражнений и в результате не могу показать, на что я способен, как программист. Поскольку именно эти качества Вас интересуют больше всего, давайте я выполню задания в офф-лайне и мы встретимся, чтобы их обсудить? Если же Вы хотели проверить, как я веду себя в стрессовой ситуации... наверное, ответ уже очевиден? "


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

Про первого из этих людей один человек сказал очень правильно "если его на собеседовании так колбасит, что с ним будет если он заглянет в код XXX — сердечный приступ?". И я в принипе согласен — такой мандраж на собеседовании говорит о фантастически низкой устойчилости в стрессовых ситуациях(стресс по началу испытывают все, это не криминально, просто некоторые с ним быстро справляются, а некоторые нет). А стресс такой может легко возникнуть на работе(упал сервис в production или у проект клиента — нужно не волноваться, а поднимать).
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[3]: Задания на собеседовании.
От: Maxim Golov Голландия  
Дата: 17.07.06 17:39
Оценка:
Здравствуйте, Anatolix, Вы писали:

A>Здравствуйте, Maxim Golov, Вы писали:


MG>>Трудная ситуация, я бы предложил такой вариант ответа: "Вы знаете, я заметил, что сильно волнуюсь при выполнении таких упражнений и в результате не могу показать, на что я способен, как программист. Поскольку именно эти качества Вас интересуют больше всего, давайте я выполню задания в офф-лайне и мы встретимся, чтобы их обсудить? Если же Вы хотели проверить, как я веду себя в стрессовой ситуации... наверное, ответ уже очевиден? "


A>На самом деле у меня на собеседованиях было 2 человека которые очень волновались(один вообще не мог 2 слов связать, а второй не смог задачки решать(устные не на компе) и именно так и ответил). Я им обоим предложил прийти в следующий раз и продолжить, но ни один не пришел. Решение дома меня бы не удовлетоврило, меня не интересует решение я хочу посмотреть как человек думает когда его получает.


A>Про первого из этих людей один человек сказал очень правильно "если его на собеседовании так колбасит, что с ним будет если он заглянет в код XXX — сердечный приступ?". И я в принипе согласен — такой мандраж на собеседовании говорит о фантастически низкой устойчилости в стрессовых ситуациях(стресс по началу испытывают все, это не криминально, просто некоторые с ним быстро справляются, а некоторые нет). А стресс такой может легко возникнуть на работе(упал сервис в production или у проект клиента — нужно не волноваться, а поднимать).


Anatolix. и Вы (тоже) правы Лучший совет соискателю — вылечиться/отучиться от мандража; как работодатель, я бы сильно задумался, удастся ли мне сработаться с таким тревожным индивидом. Впрочем, если бы это было единственным минусом на фоне массы плюсов — могло бы и перевесить, но мало шансов, подозреваю — еще что-нибудь вылезло бы, скорее всего.
Re[6]: квадратики
От: fmiracle  
Дата: 18.07.06 12:47
Оценка: +2
Здравствуйте, Ulin, Вы писали:

U>Здравствуйте, fessa, Вы писали:


F>>Советую всё же прочитать статью. Если трудно на английском — можно поискать и на русском...


U>Прочитал. Действительно, Вы правы. Оказывается, это классический пример нарушения LSP


В том случае, когда есть GetWidth и GetHeight и имеются предположения, что они должны быть независимы.
Можно рассмотреть случай, когда разрабатывается иерархия классов геометрических фигур, в которых размеры фигур не меняются — один раз создали и все. Что тут будет не так?

Можно рассмотреть случай, когда разрабатывается графический интерфейс с фигурками разных форм — и предполагается, что изменение высоты для для прямоугольника может повлечь за собой изменение ширины (скажем, наличие установки в фигуре "сохранять пропорции").

В данном вопросе на собеседовании, на мой взгляд, стоило нарисовать несколько разных иерархий — когда квадрат унаследован от прямоугльника, когда квадраты в системе являются объектами класса rectangle (просто с равными сторонами), когда квадрат и прямоугольник независимо наследуются от одного базового класса (Figure), когда квадрат и прямоугольник наследуются вообще от разных объектов (EqualSizePolygon, NonEqualSizePolygon), и еще чего-нибудь, что придумается, заодно расспросив о проблеме, которая будет решаться, и поговорить о достоинствах то или иной иерархии.


Невозможно создать идеальные классы, которые полностью отобразят реальный мир — стоит учитывать ту задачу, которая будет решаться — тогда классы выйдут красивее, проще и полезнее
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Задания на собеседовании.
От: little_alex  
Дата: 18.07.06 15:33
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, Sh1ZoID, Вы писали:


NBN>Еще бывает сложная задача — угадать (именно угадать) какое решение от тебя хотят. Многие задачи имеют несколько решений:

NBN>например вопрос — какой недостаток у STL ты знаешь? Или лучше так: Какой ГЛАВНЫЙ недостаток у STL?
NBN>Варианты ответов сходу:
NBN>непереносимость между dll, отсутствие стратегий, распухание кода. Для меня эти недостатки идут именно в таком порядке. Для работодателя могут идти в другом — и впечатление смазывается.

Непереносимость между dll — это особенности организации dll в Windows (В Linix например с этим проблем нет). Соответственно к недостакам Stl это IMHO причислять нельзя.
Re[3]: Задания на собеседовании.
От: Igor Trofimov  
Дата: 20.07.06 18:29
Оценка:
A>Про первого из этих людей один человек сказал очень правильно "если его на собеседовании так колбасит, что с ним будет если он заглянет в код XXX — сердечный приступ?". И я в принипе согласен — такой мандраж на собеседовании говорит о фантастически низкой устойчилости в стрессовых ситуациях(стресс по началу испытывают все, это не криминально, просто некоторые с ним быстро справляются, а некоторые нет). А стресс такой может легко возникнуть на работе(упал сервис в production или у проект клиента — нужно не волноваться, а поднимать).

Ну.. я позволю себе не согласиться.
Стрессы бывают разные, люди бывают разные.
Программисты часто — интроверты и общение с незнакомыми людьми может представлять для них повышенную сложность.
После того, как человек поработает в коллективе месяц-другой, все будут уже свои и от "мандража" следа не останется. А рабоче-стрессовые ситуации могут такого эффекта не давать совершенно.

В общем, если у вас кандидатов много и вы ищете еще и с крылышками за спиной — тогда да, конечно.
Но по сегодняшним меркам я бы на такие мелочи внимания не обращал

Хоть косой, хоть хромой, но если знает, что такое внешнее соединение и для чего нужны виртуальные функции — надо смотреть!
O, tempora...
Re: Задания на собеседовании по Java
От: erslgoeirjh Россия http://russianfellow.livejournal.com
Дата: 25.07.06 13:35
Оценка:
А вот интересно, какие задания бывают на собеседовании не по C++ (их я знаю), а по Java?
Пу и Ме сидели на трубе...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.