Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68

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

02.04.2013, 14:52. Показов 1981. Ответов 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
//==========================================================================
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2013, 14:52
Ответы с готовыми решениями:

Применение SOLID принципов
Всем доброго времени суток, Есть плохо написанный код машины Тьюринга на Java: package tm; import...

Объяснение принципов ООП
Простите если пишу не в той ветке. Уважаемые старшие братья, великие гуру, наставники и просто хорошие люди разбирающиеся в данном вопросе,...

Реализация принципов ООП на примере
Задача проекта должна содержать примеры реализации основных принципов обьектно-ориентированного програмирования средствами Visual Basic 6.0

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

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

Добавлено через 2 минуты
ЗЫ все-таки решил использовать перегрузку конструктора имхо это, на мой взгляд, наиболее оптимальный вариант
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
02.04.2013, 16:58
Цитата Сообщение от igor001 Посмотреть сообщение
//класс вкладки, содержащей таблицы class Page : public Tables
Я не понял, зачем здесь наследование.
Цитата Сообщение от igor001 Посмотреть сообщение
есть несколько типов таблиц (в данный момент 3, но кто знает сколько их будет завтра ) поэтому я решил создать класс "Tables" который их бы описывал и либо перегрузить конструктор класса либо использовать функции для создания различных типов таблиц.
Может проще наследовать каждый новый тип таблицы от базового класса? В Page хранить указатели на этот базовый класс.
0
8 / 3 / 2
Регистрация: 12.02.2013
Сообщений: 68
02.04.2013, 17:22  [ТС]
правильно, я хотел в классе "Рage" хранить контейнер указателей или ссылок на класс таблиц. но я уже догнал что у меня, в приведенном примере, наследование неправильное. Полагаю в данной ситуации необходимо создать абстрактный класс, связывающий класс таблицы и вкладки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2013, 17:22
Помогаю со студенческими работами здесь

Справочник с соблюдением принципов ООП
Доброго времени суток! Имеются классы: namespace Spravochnik { public class User { public int...

Написать программу с использованием принципов ООП
Написать программу с использованием принципов ООП, которая используется для хранения информации о шахматных фигурах. Каждый элемент...

Нужна идея по реализации принципов ООП
Есть программа Калькулятор , написанная на языке С++,выполняющий &quot; +,-,*,/,степень,корень и находящий корни квадратного уравнения.Также в...

Написать программу с использованием 3 принципов ООП
Здравствуйте! нужно написать программу с использованием 3 принципов ООП в java. помогите,пожалуйста!!!

Применение на практике
Доброго {TimeOfDay}. У меня возник вопрос:Помагают ли олимпиадные задачи в работе программиста? Вот пример Коррупция prb21 С целью...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru