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

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

Войти
Регистрация
Восстановить пароль
 
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
#1

Применение принципов ООП на практике (мнение о приведенном коде) - C++

02.04.2013, 14:52. Просмотров 905. Ответов 4
Метки нет (Все метки)

для ленивых: 1й абзац можно пропустить )
В силу обстоятельств я начал работать, изучать программирование и писать программу (по квесту на работе) одновременно. Товарищи коллеги, во всяком случае некоторые из них, пытались мне помогать и подучивать по мере возможностей хотя они и сами не программисты по профессии (один весьма не плохой php фрилансер, другой начинающий delphi кодер). Мне показали что есть такая удобная штука как класс и попытались объяснить как им пользоваться, но увы тогда для меня это было как для мартышки очки и я использовал только конструктор класса и считал что это круто. В данный момент я, во всяком случае мне так кажется, познал истинную ценность классов и научился с ними работать, но все же просматривая код написанный мною ранее мне плакать хочется. Это был бы не я, если бы не попытался исправить свои ошибки, тем более что это мне с ними мучатся)).

Подойдем к сути проблемы. В разработке прикладных программ у меня на работе, на сколько я знаю, никто нормально не шарит, поэтому и пишу сюда.

Идея состоит в следующем: есть несколько типов таблиц (в данный момент 3, но кто знает сколько их будет завтра ) поэтому я решил создать класс "Tables" который их бы описывал и либо перегрузить конструктор класса либо использовать функции для создания различных типов таблиц. Предполагается что таблицы размещаются в различных вкладках в основном окне программы (в одной вкладке n таблиц одного типа) для чего я создал класс "Page", являющийся производным от класса "Tables". Но так как опыта в разработке программ у меня практически 0, да и с наследованием и иерархией классов я познакомился буквально пару дней назад я весьма не уверен в правильности подхода, а так как еще и подсказать некому то это вообще пи.... в общем северный пушистый зверек.
Хотелось бы узнать авторитетное мнение более опытных программистов и услышать их критику. Ниже привел наброски того как, по моему мнению, должна быть решена эта задача. Заранее спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//==========================================================================
//класс создания таблиц
class Tables
{
    private:
        TStringGrid* table;
        TGroupBox*   tab_box;
 
        UnicodeString name;
 
        //for editor------------------------------------------->>
        TPanel*    panel;       //панель, содержащая элементы редактора таблиц
        TButton*   save;        //кнопка для сохранения отредактированной таблицы
        TButton*   add_row;     //кнопка для увеличения количества строк таблицы
        TButton*   del_row;     //кнопка для уменьшения количества строк таблицы
        TComboBox* tab_type;    //выпадающий список, позволяющий выбрать тип таблицы
        TEdit*     count_add;   //поле для определения количества строк для добавления/удаления в/из таблицы
        //for editor-------------------------------------------<<
 
        bool table_create();    //ф-ция для создания таблицы
        bool editor_create();   //ф-ция для создания таблицы-редактора
        bool statistic_create();//ф-ция для создания таблиц статистики обмена
 
    public:
        Tables(){}
 
        Tables(UnicodeString& str,      //название таблицы
               TTabSheet*     sheet)    //вкладка, которой пренадлежит таблица
        {
            tab_box          = new TGroupBox(sheet);
            table            = new TStringGrid(tab_box);
        }
};//class create_table
//==========================================================================
 
//==========================================================================
//класс вкладки, содержащей таблицы
class Page : public Tables
{
    private:
        TTabSheet* sheet;
 
        typedef map<UnicodeString&, Tables&> table_map; //контейнер, содержащий таблицы и их названия
 
    public:
        void tables_draw(); //функция авторазмещения таблиц во вкладке
 
        Page(TPageControl* parent)
        {
            sheet = new TTabSheet(parent);
        }
};//class Page
//==========================================================================
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2013, 14:52     Применение принципов ООП на практике (мнение о приведенном коде)
Посмотрите здесь:

C++ Исправить ошибки в приведенном коде
C++ Не работает сортировка в приведенном коде
Найти ошибку в приведенном коде C++
Найти ошибку в приведенном коде C++
C++ Не правильно работает if в приведенном коде
C++ Найти и исправить ошибки в приведенном коде, C++
Найти ошибку в приведенном коде C++
Найти и исправить ошибки в приведенном коде C++
Найти ошибку в приведенном коде C++
Что делает memset в приведенном коде C++
C++ Использование принципов ООП для поиска в файлах разного типа
C++ Применение ООП

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.04.2013, 16:16     Применение принципов ООП на практике (мнение о приведенном коде) #2
Цитата Сообщение от igor001 Посмотреть сообщение
есть несколько типов таблиц
каких таблиц? следует разделять данные, логику обработки данных, способ отображения данных.
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
02.04.2013, 16:52  [ТС]     Применение принципов ООП на практике (мнение о приведенном коде) #3
2 типа таблиц заполняются данными из прибора, соединенного с ЭВМ через RS-232 (т.е. в одну вкладку в 2 необходимо отображать что-то вроде лога обмена данными с прибором а в другую выводить значения параметров) и один тип таблиц для редактирования (добавлять/убирать параметры и т.п.).

Добавлено через 1 минуту
для чтения/записи через RS использую поток и написанный мною класс

Добавлено через 2 минуты
ЗЫ все-таки решил использовать перегрузку конструктора имхо это, на мой взгляд, наиболее оптимальный вариант
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
02.04.2013, 16:58     Применение принципов ООП на практике (мнение о приведенном коде) #4
Цитата Сообщение от igor001 Посмотреть сообщение
//класс вкладки, содержащей таблицы class Page : public Tables
Я не понял, зачем здесь наследование.
Цитата Сообщение от igor001 Посмотреть сообщение
есть несколько типов таблиц (в данный момент 3, но кто знает сколько их будет завтра ) поэтому я решил создать класс "Tables" который их бы описывал и либо перегрузить конструктор класса либо использовать функции для создания различных типов таблиц.
Может проще наследовать каждый новый тип таблицы от базового класса? В Page хранить указатели на этот базовый класс.
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
02.04.2013, 17:22  [ТС]     Применение принципов ООП на практике (мнение о приведенном коде) #5
правильно, я хотел в классе "Рage" хранить контейнер указателей или ссылок на класс таблиц. но я уже догнал что у меня, в приведенном примере, наследование неправильное. Полагаю в данной ситуации необходимо создать абстрактный класс, связывающий класс таблицы и вкладки
Yandex
Объявления
02.04.2013, 17:22     Применение принципов ООП на практике (мнение о приведенном коде)
Ответ Создать тему
Опции темы

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