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

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

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

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

02.04.2013, 14:52. Просмотров 917. Ответов 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++
Хотя бы намекните с чего начать. Может у кого то было подобное. Исходные данные Каталоги с файлами разных типов (.txt, .xml,...

Применение ООП - C++
добрый день. вот написал небольшой класс по работе с матрицами. он пока делает : присваивание значений матриц, удаление, ...

Найти ошибку в приведенном коде - C++
Windows выдает ошибку, почему ? #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cstdlib&gt; using namespace std; class...

Найти ошибку в приведенном коде - C++
На самом деле тут две ошибки. Первое, ругается windows при запуске (есть комментарий на какую строку). Второе - не понимаю как сделать...

Не правильно работает if в приведенном коде - C++
Есть функция которая считает начало слова в строке(a - массив строк, b - массив разделителей).Столкнулся с проблемой что не смотря на то...

Найти ошибку в приведенном коде - C++
#include &lt;iostream&gt; using namespace std; /////////////////////////////////////////////////////////////////////////////////// ...

Исправить ошибки в приведенном коде - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int...

Найти ошибку в приведенном коде - C++
void Print(int a) { cout &lt;&lt; &quot;int : &quot;&lt;&lt; a; } void Print (float b) { cout &lt;&lt; &quot; Float : &quot; &lt;&lt; b; } void...

Не работает сортировка в приведенном коде - C++
что тут не так? #include &lt;iostream&gt; using namespace std; void en(int* a, int size); void ex(int* a, int size); void...

Найти и исправить ошибки в приведенном коде - C++
//#include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; void main () { setlocale (LC_ALL,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 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!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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     Применение принципов ООП на практике (мнение о приведенном коде)
Ответ Создать тему
Опции темы

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