Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.93
dr.curse
388 / 344 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
#1

Знаю ли я основы ООП? - C++

09.07.2012, 23:11. Просмотров 3795. Ответов 62
Метки нет (Все метки)

ООП я изучал но не применял, ну если не считать собственный класс string и примитивную обертку WinAPI. Так что прошу дайте мне задачи по ООП, чтобы понять на каком уровне находятся мои знания, и на основе этих результатов понять могу ли я читать книгу четырех или еще рано.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2012, 23:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Знаю ли я основы ООП? (C++):

Основы ООП - C++
Здраствуйте! Уже второй день пытаюсь разобраться и хорошего ответа так и не нашел. На форуме подобные вопросы видел, и википидею читал, но...

Основы ООП, ввод данных - C++
Собственно, осваивая основы ООП и выполняя заодно частичное задание с универа(1 курс :scratch:) Наткнулся на проблему ввода данных в...

ООП Создание основы класса - C++
Здравствуйте, получил задание, но немного недопонимаю как это сделать, с чего начать. Помогите пожалст или объясните образно как сделать, а...

Ооп. Изучаю основы, обьясните на примере - C++
Класс: форум - сайт для общения. Объект форум - собственно любой форум. Тут все понятно. Форумный движок тоже класс, соответственно...

Основы ООП. Создание стека через класс - C++
Приветствую всех пользователей форума. Относительно недавно начал осваивать ООП. Было необходимо выполнить следующее задание : нужно...

Где могу прочитать про основы ООП? - C++
Где могу прочитать про основы ООП?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.07.2012, 10:46 #46
Цитата Сообщение от ForEveR Посмотреть сообщение
novi4ok, boost это все же namespace.
ну да, это я с прямым углом спутал...

Добавлено через 5 минут
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вобщем я когда-то давно обращался сюда на форум с этой же задачей (и со своим быдлокодом), вот решение, которое предложил CyBOSSeR, на мой взгляд хорошее.
Тут только дизайн, без реализации:
}[/CPP]
плохой дизайн. даже очень плохой. сделан человеком, который только-только прочитал об ооп и решил, что его теперь будет применять где только можно. как ребенок, которому подарили молоток, бегает по квартире и стучит не только по гвоздям. имею опыт сопровождения продукта, где поработал такой "дизигнер" и знаю, какой это геморрой.
чтобы не быть голословным, предлагаю кратко описать, как работает код (дезигн, если так больше нравится), созданный ForEveR, и то же самое проделать для этого "на твой взгляд хорошего" решения. просто расскажи, чтобы было понятно, как эти лебедь, щука и рак совместно трудятся. сколько слофф тебе понадобится, и будет ли после этого понятно. ооп - для упрощения, а не наоборот.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 12:20 #47
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Kastaneda, на самом деле, сейчас я бы все таки убрал бы реестр комманд внутрь друго класса, аля CommandExecutor, чтобы main, ни про реестр, ни про команды не знала. Да и вообще бы, не стал бы выделять реестр как класс, сложил бы просто в виде std::map в CommandExecutor. И стоит подумать на тем, чтобы вообще от комманд избавится, ибо их немного совсем.
Цитата Сообщение от novi4ok Посмотреть сообщение
плохой дизайн. даже очень плохой.
По каким критериям оценивали? И какой дизайн по-вашему хорош?

Добавлено через 19 минут
Kastaneda, можно вообще избавится от интерфейса комманды, чтобы я и сделал бы, получилось бы что-то вроде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct CommandRegistry {
  static void CalculateWordsCount(const Arguments& args);
  static void CalculateChecksum  (const Arguments& args);
  static void PrintHelp          (const Arguments& args);
};
 
int main(char* argv[], int argc) {
  CommandExecutor cmdExecutor;
  cmdExecutor.register("word"    , std::bind(CommandRegistry::CalculateWordsCount, _1));
  cmdExecutor.register("checksum", std::bind(CommandRegistry::CalculateChecksum  , _1));
  cmdExecutor.register("help"    , std::bind(CommandRegistry::PrintHelp          , _1));
 
  Arguments args(argv, argc);
  cmdExecutor.execute(args.has('m')? args.get('m') : 'help', args);
}
Просто ICommand это скорее Java style. В boost/С+11 есть function, которыми и стоит пользоватся.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.07.2012, 12:34 #48
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
По каким критериям оценивали? И какой дизайн по-вашему хорош?
критерий простой: насколько решение проще/сложнее самой задачи.
понять твое решение можно, но оно неоправданно наворочено. нужно пытаться находить простые решения для сложных задач, а твое - типичный пример того, как можно накрутить с решением примитивной задачи.
Jupiter
11.07.2012, 12:56
  #49

Не по теме:

novi4ok,

Talk is cheap. Show me the code.
это не я, это он(Торвальдс) вас матом кроет

CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 14:05 #50
Цитата Сообщение от novi4ok Посмотреть сообщение
критерий простой: насколько решение проще/сложнее самой задачи.
Есть и другие критерии оценки дизайна, такие как степень разделения ответсвенности, связность, связанность, расширяемость и т.д. Решение этим критериям удовлетворяет.
Но все же Вы правы, решение сложновато для поставленной задачи. Все таки от команд нужно избавится в пользу обобщеных функторов и убрать реестр, получится что-то вроде примера в #47.
Kastaneda
11.07.2012, 14:26
  #51

Не по теме:

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

novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.07.2012, 17:35 #52
Цитата Сообщение от Kastaneda Посмотреть сообщение

Не по теме:


Там по условию задания было "накрутить", дабы продемонстрировать навыка владения ООП.

меру знать нужно (не только в ооп)
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 18:08 #53
novi4ok, все таки, думаю, многим хотелось бы увидеть Ваше решение. Представьте его, пожалуйста.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
11.07.2012, 18:56 #54
Если кому-то интересно, это было тестовое задание в 2gis
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Представьте его, пожалуйста.
Поддерживаю!
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.07.2012, 21:31 #55
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
novi4ok, все таки, думаю, многим хотелось бы увидеть Ваше решение. Представьте его, пожалуйста.
так я уже вроде высказался по этому поводу (последняя строка)?

Знаю ли я основы ООП?

так что спрашивай если что ...
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 21:53 #56
Цитата Сообщение от novi4ok Посмотреть сообщение
так что спрашивай если что ...
Это не решение, это слова. Нужен код, в достаточном количестве, чтобы оценить дизайн.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
12.07.2012, 00:47 #57
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Это не решение, это слова. Нужен код, в достаточном количестве, чтобы оценить дизайн.
0. я не собираюсь решать эту детскую задачу
1. кому нужен код?
2. мне не нужно, чтобы кто-нибудь здесь оценивал мой дизайн.

отсюда: зачем я должен тратить мое время на то, что нужно кому-то, а мне этого делать не хочется? логично? а главное - просто! это и есть ооп!
xADMIRALx
67 / 61 / 1
Регистрация: 09.06.2012
Сообщений: 291
12.07.2012, 01:08 #58
Программисты,кто как считает что луче использовать паблик переменный или свойства для класса?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.07.2012, 01:33 #59
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от novi4ok Посмотреть сообщение
0. я не собираюсь решать эту детскую задачу
Предложите взрослую и покажите решение (но не сразу).
Цитата Сообщение от novi4ok Посмотреть сообщение
1. кому нужен код?
Как минимум три человека хотели бы увидеть Ваше решение.
Цитата Сообщение от novi4ok Посмотреть сообщение
2. мне не нужно, чтобы кто-нибудь здесь оценивал мой дизайн.
Раз уж Вы взялись критиковать чужое, представьте Ваше решение. Покажите как бы Вы решали задачу, возможно кому-то это будет полезно.
Цитата Сообщение от novi4ok Посмотреть сообщение
зачем я должен тратить мое время на то, что нужно кому-то, а мне этого делать не хочется?
Плох тот программист, который не хочет писать код. Да и на бесполезную болтовню Вы потратили больше времени.
Цитата Сообщение от novi4ok Посмотреть сообщение
а главное - просто! это и есть ооп!
Мда... Какое у Вас странноватое представление об ООП.

Добавлено через 12 минут
Цитата Сообщение от xADMIRALx Посмотреть сообщение
Программисты,кто как считает что луче использовать паблик переменный или свойства для класса?
Класс должен представлять либо поведение и не иметь открытых полей, либо быть простым набором полей без поведения. Смешивать одно с другим не стоит.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
12.07.2012, 02:10 #60
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
...на бесполезную болтовню Вы потратили больше времени.
если для тебя это - бесполезная болтовня, то почему ты реагируешь?
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Мда... Какое у Вас странноватое представление об ООП.
у меня не "представление", у меня - опыт многолетнего успешного пркактического использования (чувствуешь разницу?)
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Класс должен представлять либо поведение и не иметь открытых полей, либо быть простым набором полей без поведения. Смешивать одно с другим не стоит.
все должно диктоваться исключительно целесообразностью конкретной задачи и ситуации, в которой приходится ее решать. все. некоторые имеют многое, но мало что умеют, некоторые - наоборот. и те и другие в какой-то ситуации оказываются полезными именно с этими свойствами. чаще - совокупность этих единиц с различными свойствами оказывается оптимальной (если удачно сконструирована и использована). (странное у тебя представление о том, "что должен представлять класс". ты еще скажи, что "класс должен иметь два метода и два три поля", или что-нибудь в этом роде).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 02:10
Привет! Вот еще темы с ответами:

Основы ООП [С++] - C++
Немного знаю Java, написал программу которая по заданным 2-м сторонам и углом между нимию Попробовал перевести на С++ #include <math.h> ...

Классы основы - C++
class a1 // это определение класса { -||-||-; }; a1 b; // как я понимаю это объявление скажите пожалуйста где здесь...

Основы ветвления - C++
Встретился на сайте с такой подачей ветвления: if ( !qwe ) Что значит восклицательный знак, неравенство?

Основы массивов - C++
Изучаю массивы, в книге Объектно-ориентированное программирование в C++ Р. Лафоре. #include <iostream> using namespace std; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.07.2012, 02:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru