Подскажите, что исправить, чтобы матрицу вынести в собственный класс, для дальнейшего использования в светомузыке, но это позже, сейчас нужно создать класс матрицы. Заранее спасибо)
Вложения
-
908 байт Просмотры: 8
Почему бред? Или это только к этому коду относится? Я частенько балуюсь конструкторамив приведенном коде ДВА конструктора для одного экземпляра, что есть есть бред
class Matrix : public Max72xxPanel
{
...
};
Просто тупо наследоваться от какого-то класса бессмысленно, наследование это сильная связь с семантикой - "является". Которая в данном случае никак не соответствует действительности. К тому же потеряется вся соль ООП, и применение различных ООП техник будет затруднено. Кроме того, автор говорит, что ему нужно подключать не определенное количество матриц, и эти техники могут очень пригодиться для решения данной задачи. Композиция намного предпочтительнее в данном случае, что собственно автор и сделал.@Artem987,
воспользуйтесь же технологией ООП!
1. Правильно наследуйте класс от родительского Max72xxPanel;
2. Используйте вложенные конструкторы класса;C++:class Matrix : public Max72xxPanel { ... };
3. Все методы и поля родительского класса Max72xxPanel акромя private будут вам доступны из коробки.
4. Добавляйте по необходимости свои методы или переопредляйте наследуемые.
class Matrix {
public:
Max72xxPanel matrix;
Matrix(int pin, int width, int height)
: matrix(pin, width, height) {
matrix.setIntensity(5);
for (byte i = 0; i < 4; i++) {
// матрицы расположены криво, здесь поворачиваем
matrix.setRotation(i, 1);
}
matrix.fillScreen(LOW);
matrix.write();
};
И что? Наследование очень мощная штука в умелых руках. Если нам нужно расширить функционал какого-то класса, то наследование - это единственный верный вариант (еще лучше конечно использовать интерфейсы и DI, но у МК мне кажется не хватит памяти).Просто тупо наследоваться от какого-то класса бессмысленно, наследование это сильная связь с семантикой - "является".
И чем же предпочтительна? Потрудитесь впредь обосновывать ваши мысли более коррекно грамматически! Не нужно что-то додумывать за ТС, якобы не реализованное, - да вот если, да кабы, да во рту росли грибы.. Я исходил из того, что ТС нужно неограниченное количество экземпляров класса, но не неограниченное количество данных. Если же вы уверенны в обратном, что "нужно подключать не определенное количество матриц", то приведите хотя бы пример фабрики классов, где эта фича реализована.Композиция намного предпочтительнее в данном случае
Наследование далеко не единственный вариант.И что? Наследование очень мощная штука в умелых руках. Если нам нужно расширить функционал какого-то класса, то наследование - это единственный верный вариант (еще лучше конечно использовать интерфейсы и DI, но у МК мне кажется не хватит памяти).
Неожиданно, промелькнула здравая мысль, именно отсутствие прямой связи с объектом-исполнителем и развязывает руки в применении мифических ООП техник.Фактически, всё, что хочет ТС - создать обёртку, в которую засунуть свойства, которые не связаны с оригинальным объектом
Почитайте, что хочет ТС:автор хочет чтобы его код работал всегда с матрицей как с единым целым объектом, т.е. логика основной программы не должна беспокоится о том, сколько там фактически используется конкретных матриц, и как они вообще работают
Похоже это на тот бред, что Вы написали?в классе будет как минимум функция в которую будет передаваться список значений частот музыки для цветомузыки
в любом случае, даже с использованием базового класса без изменений. Если базовый класс таких методов не предоставляет, то какие бы мифические практики не применялись, результата не будет.если автор захочет сделать матрицу поярче и побольше, то подменить реализацию не составит большого труда
запросто, будь это интерфейсы. я полагаю мы сильно отклонились от темы, и скатываемся в вечные холивары. ТС-у есть что почерпнуть из этой темы.Если унаследоваться от конкретной реализации, то потом уйти от неё будет нельзя, придется все таскать за собой, а если например, захочется подключить матрицу из адресных светодиодов, то придется все переделывать, что радости врят ли добавит.
композиция предпочтительна тем, что не нужно беспокоиться об объекте, он сам изменит свое состояниеИ чем же предпочтительна?
пример конечно стремный, хотя бы привели пример с квадратом и прямоугольником. смотря что вы имеете ввиду под термином "машина". если это автомобиль, то это одно, а если это часть чего-то... так что контекст рулитПример более очевидный, если вам нужно описать объект машина, вы же не станете при этом наследоваться от объекта типа двигатель, или станете?
Да, но мы же не с интерфейсом имеет дело, а с конкретной реализацией и предлагают наследоваться именно от реализации.запросто, будь это интерфейсы. я полагаю мы сильно отклонились от темы, и скатываемся в вечные холивары. ТС-у есть что почерпнуть из этой темы.
Пример отличный, явно показывает всю абсурдность попытки создать обобщённую сущность, используя наследование от конкретной реализации.пример конечно стремный, хотя бы привели пример с квадратом и прямоугольником. смотря что вы имеете ввиду под термином "машина". если это автомобиль, то это одно, а если это часть чего-то... так что контекст рулит
Тем, что композиция образует более слабую связь, нежели наследование, а значит более гибкую.И чем же предпочтительна?