![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
WaReZMEN |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Вот сел накидал... незнаю но что то мне подсказывает что сделал что то не так хотя все работает хочу выслушать критику
![]() Главная форма
Основной и единственный Класс
P.S. Всю жизнь писал на дельфи поетому не придераитесь к именам класса и переменным ![]() |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Мелкие придирки:
- ArrayList заменить на List<TProfil> объектов - в обработчике MouseDown вызывать не Paint класса, а метод Refresh() формы - в метод Paint передавать ссылку на Graphics (брать из e), вместо того чтобы создавать графикс с пом. CreateGraphics -------------------- ![]() |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
1) MngConstruction ConMng; - можно сделать readonly
2) не особо тут много ооп... есть паттерны вроде observer (publish/subscriber), и другие... хотя теже яйца только боком... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
mr.DUDA,
Просто еще не весь код так как в ArrayList будут не только TProfil но и прочие классы чуток позже дапишу покажу... Про MouseDown и Graphics спасибо учту. И еще стоит ли в класс MngConstruction форму передовать? jonie, спасибо за совет! |
|||
|
||||
WaReZMEN |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Вот последняя версия
Главная форма
Класс
Сдесь добавил еще класс TInfill ну и сделал класс TConstructionElement в нем основные своиства каторые есть почти во всех остальных... еще подумываю пренести сюда метод Recalc с пораметром. Что скажете??? Мне чесно нужно мнения грамотных людей. |
||||
|
|||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
слету : public const int alRigth = 13; -- в enum, жИвотное)!
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
jonie, чаго???
|
|||
|
||||
source777 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
+много
WaReZMEN, что это за безобразие
Класс должен быть одним единственным АТД, а не кучкой констант или переменных...
Дублирование кода сплошь и рядом, например, фрагменты:
и им подобные многократно встречаются с незначительными вариациями... P.S. Это не ООП вообще, это лишь кодирование с использованием классов, как языковой конструкции. Ты только посмотри сколько у тебя в коде блоков switch!!! -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||||||
|
|||||||||
WaReZMEN |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, c enum разобрался.
public class Const ... я поискал по нету был именно такои савет... Я понимаю что глупость но на тот мамент я других вариантов не знал....
Cдесь убрть сложновато пока даже не вижу как... а вот
Ну от этого никуда не денешся я б с удовольствием сделал переращет какнибудь по другому но подругому не вижу как! P.S. А куда денешся от switch????. В месте с критикои хотелось бы и реальной помощи ![]() Это сообщение отредактировал(а) WaReZMEN - 6.8.2008, 02:23 |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Ну так сделаешь общий интерфейс типа IMyObject, реализуешь во всех классах и будешь добавлять объекты разных типов в список. Иначе общий список вообще незачем делать, целесообразнее несколько списков завести, соответственно будет несколько циклов без проверки типов объекта. -------------------- ![]() |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
mr.DUDA, Ок учту.
|
|||
|
||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Ничего сложного тут нет, даже можно сказать, что всё элементарно: 1) читаем, что тебе насоветовал mr.DUDA 2) Заменяем
на
3) дивимся как работает шайтан-машина под названием "полиморфизм". Блин, ну ты про ООП почитай хоть маленько, именно про ООП, а не про синтаксис классов... Про паттерн State для начала, например. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777,
Возможно все это и поможет но по части расчета координат вообще не вижу иного способа.... как там все сложнее чем есть сеичас... позже выложу последний код щас пока подправлю что вы говорите. Кстате спасибо огромное за советы!!! |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Значит сделай, чтобы стало проще. Главное понять, что ты сам всё усложняешь...
Это сообщение отредактировал(а) source777 - 6.8.2008, 13:14 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, а де лучше о паттерн State почитать???
|
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
-------------------- I don't need a reason being who I am... |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Skynin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
Не об ООП, но нехорошо:
потому что дважды производится преобразование к типу. Нужно:
Подробности: As is или история о том как не надо писать код |
||||
|
|||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
да нет, это нехорошо совсем по другой причине: тут вообще в приведении типов никакой надобности нет, а в твоём варианте оно осталось! надобности нет и в публичном свойстве isSelected, это все детали реализации класса и на показ их незачем выставлять, эту логику необходимо перенести в свойство, возвращающее цвет в зависимости от состояния.
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777,
Я вот подумывал об этом но теперь точно именно так и сделаю... ![]() |
|||
|
||||
WaReZMEN |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Вот последняя версия на текущий момент
класс
Вот форма
|
||||
|
|||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Я вот не пойму ты - совсем ку-ку или прикидываешься? Какой семантический смысл у твоего enum Const ??? Это безумная свалка констант, а не перечисление получилась... P.S. Работа над ошибками не проведена, по прежнему не используется ООП, вообщем крепкая двойка за код! -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
ггг ) из одного этого безумного enum-a гораздо логичнее сделать четыре, хотя бы разделённых по смыслу )
source777, ну что вы так уж сразу двойки ставите) человек же только учится) так и желание отбить не долго... -------------------- СУВ, Partizan. |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Partizan, поздравляю с 1000-ым сообщением
![]()
P.S. Лучше бы он взял маленький кусок своего кода строчек на 100 и довёл его до ума, а не плодил дурнопахнущий код... Тем более что его уже невозможно читать: все классы кроме формы в одном файле, ни единого комментария... А имена переменных - это вообще отдельный ужос, чего только myBrush стоит или tmpInfill.Infill1... Это сообщение отредактировал(а) source777 - 7.8.2008, 13:18 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, нивижу большого отличия от 4-х enum-a... и кстате к названию просил не предиратся смотрите первый топ....
ну я стораюсь юзать ООП но что еще осталось поскажите .... Partizan, стараюсь двоикои меня не испугаеш... ядумаю строшнеее без ответов в теме две недели ![]() |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Это не придирки, это очень важный момент, а первый топ я смотрел... Жаль только, что из-за таких вот прецедентов ходят слухи, что Delphi-программисты ничего кроме расставления кнопок по формам не умеют...
Значит не прикидываешься... Что значит Const.alCenter ? С таким же успехом можно было везде в коде вместо него 10 писать! От замены магического числа на магическое слово ничего не поменялось... Ты не сможешь объявить, находясь в здравом уме, переменную типа Const!!! А введя перечисление Alignment, ты смог бы использовать семантически ясную запись типа: Alignment.Center. Да всё осталось... ты же ничего по сути не исправил.. только синтаксис в паре мест изменил. 90% кода, который ты сюда выкладываешь, никуда не годится, но кто ж будет тебе описывать все недоразумения 500 строк кода, если хочешь можешь выделить любой метод, и я тебе по нему конкретно накидаю кучу замечаний... Попробуй написать с нуля, но на сей раз с учётом ООП... Потому что из запорожца мерседес всё равно не сделать... -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
Ну раз уж на то пошло, то чтобы добиться OOP-style, надо сначала спроектировать приложение, выделить сущности, взаимоотношения между ними..use cases нарисовать в конце концов...а 100 строк доводить "до ума" смысла нет...ибо дабы приложение таки соответствовало концепции ООП, его надо пересматривать в корне и постепенно изменять в сторону ООП...то есть я говорю о том, что взор разработчика должен затрагивать всю систему в целом...как бы воспарить над ней и посмотреть сверху: а какое же оно сейчас моё приложение и какое оно должно быть...а ограничиваться 100 строками кода - эт ни к чему не приведёт ![]() -------------------- СУВ, Partizan. |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Ну правильно, давайте теперь на форум постить листинги по 5-50 тыс. строк и спрашивать, что в них не так с точки зрения ООП... Может всё-таки для начала нужно концепции ООП изучить на небольшом объёме кода? P.S. А насчёт системы в целом, это UML-диаграммы надо смотреть, код для этой цели вообще не катит... -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
source777, на самом деле топик изначально некорректно задан)
-------------------- СУВ, Partizan. |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Это точно, а в названии темы запятая пропущена и "не" отдельно написано.
![]() -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
WaReZMEN, вот тебе список вопросов, пока ты для своего кода не ответишь на все эти вопросы положительно, разговаривать с тобой будет бесполезно...
![]() P.S. И добавь комментарии к методам и классам!!! -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, слов нет. Ну я ведь просил не придерется к названиям та как изменить их дело 10 секунд а на данном этапе мне и так понятно что и они обозначают. Я прекрасно понимаю, что здесь можно долго возражать. В дельфи делалось все проще создал юнит там константы объявил и юзаи их де нужно. По поводу списка вопросов вопросы конечно интересные постараюсь ответить. Тем неимение спасибо, что так раскритиковали заставляет задуматься тем ли я занимаюсь… Мож на сварщика пойти…
Вот enum переделал так лучше?
Ну имена переменных слабость вечно полчаса сидишь и думаешь как назвать... myBrush ну а как к примеры вы бы назвали??? tmpInfill ну да здесь глупо конечно был еще один вариант xInfill ![]() Infill1 и Infill2 ну здесь вообще другие варианты просто отпадают ибо у каждого infil может быть еще два... Это сообщение отредактировал(а) WaReZMEN - 8.8.2008, 02:32 |
||||
|
|||||
Skynin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
Я сразу написал, что не бо ООП мое замечание. Потому что в задачу не вникал, чтобы указать где что-то можно реализовать. Такие куски кода разве что будучи тим-лидером буду исследовать.
Приставка my в названиях мне вообще непонятна. К чему "Мои документы", ..., myBrush, myCollection и т.д.? Понятно что если я написал то оно и так - My. В случае же расширения классов конкретно ради специфики задачи и когда на ум ничего не приходит в качестве приставки, или окончания (зависит от пожеланий к сортировке при отображении в IDE) использую название проекта. Обычно 3, 4ре первые буквы. Пример - это тоже проект. Приучайтесь к порядку и конкретике;
Может ![]() Но тут решать нужно - чем больше нравится заниматься. А насчет критики - то напрасно удивляетесь. Иного и быть не могло, даже если бы написали красивейший код. Для того чтобы научиться писать в стиле ООП быстро и надежно (а не долго, от проекта к проекту по капле выдавливая из себя "процедуриста", и периодически впадая обратно) берете - Smalltalk(Cincom'овский например) - и вперед. Там либо ничего не напишете, либо в ООП. |
||||||
|
|||||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Skynin,
Я не против критики ![]() |
|||
|
||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Зачем полчаса придумывать какое-то абстрактное имя для переменной? Если она не имеет чёткого семантического смысла, значит она не нужна, а если имеет, то и назови её исходя из смысла... Смысл твоих переменных неочевиден и не описан в комментариях, поэтому хорошего названия на все случаи тебе никто не предложит, пока ты не разъяснишь конкретную ситуацию.
Добавлено через 5 минут и 10 секунд гораздо лучше, ещё бы приставку ms убрать из значений MouseState, и Align заменить на Alignment, всё-таки существительные в данном случае предпочтительнее. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
WaReZMEN |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777,
Фраза может и не очень, но отражает суровую действительность... Так как что структура такова что самого начала работы программы у нас есть только одно заполнение когда мы кидаем на него Импост наш инфил грубо говоря делится на две части справа от импоста и слева. Так вот мне кажется, что такая структура правильна. Иначе придется сперва заполнение делить на множество вообще на мои взгляд так проще (с двумя инфилами) по поводу Alignment ну я так и сделал сначала а потом посмотрел что в Делфи к примеру это свойство отвевает за выравнивание, а меня как бы к чему прилипает (глупо конечно звучит ) а MouseState уже убрал ![]() Может, поможете мне решить проблему с методом Recalc
Все говорили что много switch и что нужно юзать паттерн State. Почитал я думаю что сдесь он не уместен. Если не прав растолкуйте. Скажу лишь, что это метод вызывается только при созданий экземпляра класса TPrifil это груба говоря, рама окна. Это сообщение отредактировал(а) WaReZMEN - 8.8.2008, 12:21 |
||||
|
|||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Это всё отмазы, если структура - плохая, то надо сделать хорошую исходя из задачи, а не исходя из структуры. Ты можешь хоть описать, что ты делаешь, нормальным русским языком? Или ты думаешь, что кто-то понял твой код?
![]() ![]() ![]()
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, еслиб запустили мои код то уивидели бы что я делаю... Это примитивный конструктор пластиковых окон.
Вообщем каждое окно состоит из рамы (я предпоситаю слово каробка TConstraction) стекл (или запонения TInfill) и импостов TImpost перегородок разделяющих раму онка и соответствено стекла (в место одного большого) два поменьше... рама (каробка) состоит из 4-х профилеи (всмысле пластиковых профилеи TProfill). Метод Recal (деиствие или как вы его называете...) для меня это грубо говоря процедура расчета координат профиля для его графического отображения точки он записывает в maspoint...
Parent это какраз сылка на клас TConstraction мы делаем это для того чтоб понят к какой канструкций принадлежит данный профиль... как заменить на набор вычесляемых свойств не знаю как это сделать...
Насамом деле он создается только один раз для конкретного профиля. в дольшеишем нет пересчета...
Центральные точки управления чего? P.S. Вот скрин программы... ![]() Планируется еще створки добавить предпологаю что класс створок будет наследоватся от TConstraction. |
||||||||
|
|||||||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Pane - оконное стекло
WindowFrame - оконная рама Separator - перегородка-разделитель Profile - профиль Ну демонстрируй, как ты за 10 сек, меняешь имена классов...
Как в анекдоте:
Так что запомни: если код надо выполнить, чтобы понять, что он делает, то этот код необходимо выбросить!!! Ну хоть что-то удалось из тебя выжать... Уже можно сказать, что отношения наследования тут нет! А есть класс Window, в него включены экземпляры классов WindowFrame, Separator, List<Profile>, List<Pane>. У всех классов (Window, WindowFrame, Separator, Profile, Pane) есть св-ва TopLeftPoint, Width и Height и метод Draw, их можно взять у IDrawable, причём эти свойства read-only(исключение для Separator, который можно двигать, и Pane, геометрические св-ва которого меняются в зависимости от Separator) и устанавливаются в конструкторе. Дальше всё вполне просто, возможно ты даже справишься с реализацией самостоятельно. Failed. Центральные точки управления ЧЕМ? Сложностью естественно. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
WaReZMEN |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Названия эти не мной придуманы так они насамом деле называются в производстве оконных пластиковых конструкциях...
Ну потому как был метод Paint в классе MngConstruction (он типа управляющий класс)...
Я упоминул что в будущем будет створка и если мы будем двигать Импост или как вы его назавали Separator то естествено створка будет пересчитыватся.... а вообще можно посомтреть мою прогу работающую на дельфе http://primokna.ru/PrimOknaSoft.exe ну это если интересно...
За это спасибо! Вот только мне лично кажется что к примеру импост (Separator) можно унаследовать от Profile створку от WindowFrame... может я и не прав конечно... Так осталось не понятно как быть с расчетом координат для Profile и прочих элементов? Это сообщение отредактировал(а) WaReZMEN - 8.8.2008, 14:57 |
||||||||
|
|||||||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
SKrivosein |
|
|||
![]() Идущий в даль ![]() ![]() Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
Спустил твою прогу, не очень понятно что делает.Особенно когда щелкаю на раму, ну становятся синего цвета. ну ладно написано "примитивный".
А допиши метод FMain_Paint так:
Небудет так графика мерцать. ![]() Это сообщение отредактировал(а) SKrivosein - 8.8.2008, 15:56 |
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
Эта тема уже разрослась до неимоверных пределов. Я думаю, обсуждение в таком же ключе мало чем поможет - надо перепроектировать. Автору неплохо бы изучить ООП, построить диаграмму классов, взаимодействий и потом уже заняться кодированием.
-------------------- I don't need a reason being who I am... |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
QryStaL, а я как раз подумал, что автору следовало бы создать новый топик в разделе о проектировании ПО и запостить туда предметную область. Я думаю, что такие корифеи системного анализа как ida, помогут.
-------------------- СУВ, Partizan. |
|||
|
||||
WaReZMEN |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
SKrivosein,
это выделения в будущем можно будет посмотреть размеры и тип выбраного профиля.... За код против мерцания отдельное спасибо ![]() source777 ,
Вот если чесно профиль делается из тогоже что и перегородка зазница между ними в ом что у профеля углы скошены а у перегоротки прямые ну и ее можно двигать... Рама тоже 4-х угольная как и створка более того в створке тоже может быть несколько стекл и перегоротка. Воообщем если говорите не нужно наследовать значит не буду... По поводу названий Pane не совсем верно так как в окнах не обязательно стекло может быть... Вообще в пластиковых окнах есть понятие заполнения в него входят стеклопаке (несколько стекл 2-3 и больше) а также сендвич-панель ну прочие не буду вдаватся в детали.... QryStaL,
Ну этим я какраз токи я занялся... по поводу ООП ну какбы я знаю что это такое и с чам это едят... Partizan, ну мне то ножно не готовое решения я хочу понять как должно быть. как говорилось выше программа то работает (просьба не кречать про говнокодерство) и я щас разбераюсь как по правельному должен быть написан подобный код вот и все... Это сообщение отредактировал(а) WaReZMEN - 9.8.2008, 01:20 |
||||||
|
|||||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
WaReZMEN, а с чего вы взяли что в разделе о проектировании дают готовые решения? всего-то помогут нормальную структуру классов сделать...
-------------------- СУВ, Partizan. |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
||||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
Ладно, не хотите прислушаться, разбирайтесь сами....
-------------------- СУВ, Partizan. |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
||||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
-------------------- СУВ, Partizan. |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Partizan, спасибо почитаю...
|
|||
|
||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Я не говорю, что не надо использовать наследование вообще, но пока не доказано, что объекты связаны отношением "является" наложить запрет на использование наследования вполне разумно.
+ на схеме не отражена композиция в классе Window, о которой я уже говорил. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777,
о Window ну да пока не сделал... По поводу абстрактного класса уже сделал. source777, Спасибо огромное за то что помогаете мне разобратся да и вспомнить что к чему! + |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777
Вот накидал побыстрому ![]() Тока чесно не понимаю нафтга интерфеис использовать? вот код
|
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
P.S. Следующим шагом, спроектируй публичные методы своих классов и опиши их действия на псевдокоде, максимально детализируй псевдокод, но с учётом того, что псевдокод не зависит от языка программирования! -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
||||
|
||||
nagg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 6.1.2008 Где: Minsk Репутация: 4 Всего: 4 |
Рекоммендую почитать товарища Макконнелла с его "блокбастером" - Совершенный Код (вопросы по типу "нафига интерфейс" отпадут сами собой)
ЗЫ: и про псевдокод там есть : ) Это сообщение отредактировал(а) nagg - 11.8.2008, 10:24 --------------------
I am the State... |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
||||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Стив Макконнелл "The Code Complete" оно же "Совершенный код", кстати список вопросов по качеству классов(см.выше), как раз оттуда
![]() Запись алгоритма на естественном языке, в нашем случае, на русском. Описывать надо то, что будет делать код, а не как он это будет делать. Это сообщение отредактировал(а) source777 - 11.8.2008, 12:27 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, это прям в редакторе тоесть какбы каментрий в классе?
так ?
Это сообщение отредактировал(а) WaReZMEN - 11.8.2008, 13:04 |
|||
|
||||
source777 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Пример:
........ позже псевдо-код превращается в реальный код, каждой строке псевдокода обычно соответствует 1-7 строк реального кода.
........ Псевдокод помог нам понять, что инициализировать кисти и карандаши жёлтым цветом бессмысленно и не нужно, а также что процедуры построения и заливки полигона лучше централизовать, и создав тем самым точку управления, вынести в базовый класс. Более того, мы видим, что сам метод Draw стал настолько ясным и универсальным, что и сам подлежит выносу в базовый класс как невиртуальный. Методы же DrawPoligon и FillPoligon следует сделать виртуальными. P.S. Идея ясна? теперь пиши псевдокод для всех остальных методов... реальный код пока не пиши (ни в коем случае)!!!. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||||
|
|||||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Вот написал
Так теперь диаграма классов выглядит ![]() |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Название метода предполагает, что он удаляет разделитель, что не согласуется с псевдокодом, надо чтобы согласовалось! либо переименовывай в AddSeparator, либо меняй псевдо-код.
В целом уже гораздо лучше, теперь следует выделить каждый класс в отдельный одноимённый файл, затем реализуй абстрактный класс и класс рамы. Кстати методы FillPoligon и DrawPoligon в абстрактном классе надо пометить как abstract, а не virtual... т.к. они на уровне абстрактного класса не могут иметь адекватной реализации. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, Так сделал что дальше?
|
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
ну если уверен в реализации, то реализуй остальные классы...
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777,
Вот реализайция абстрактного класса мне правда кажется нужно еще добавить масив с 4мя координатами для профилеи, стекл и перегоротки. А поповоду класса Рама его нет смысла деть без реализаций класса Профиль.
|
|||
|
||||
source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
![]()
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, а можно сдесь поподробнее?
Это сообщение отредактировал(а) WaReZMEN - 14.8.2008, 00:54 |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Вот класс Профиль
Это сообщение отредактировал(а) WaReZMEN - 14.8.2008, 02:28 |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Подробнее может быть лишь готовый код, а это ты должен сделать сам. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
||||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Не переменные а константы, если это действительно константы! Запомни, в коде методов допустимо только два числа 0 и 1, никаких других чисел внутри методов быть не должно! Причём название константы должно означать её смысл, а не значение, поэтому Color.Black тоже не подойдёт!
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777, а разве не понято из левои части
this.BorderColor = Color.Black; this.FillingColor = Color.FromArgb(250, 250, 250); this.FillingSelectColor = Color.FromArgb(182, 209, 255); Я конечно вынесу от с названиями этих цветов будут деиствительно проблемы ![]() Спасибо что все еще расказываете что да как ![]() |
|||
|
||||
mihryak |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 10 Всего: 36 |
а я вот пополам делю порой, это смертельно? ![]() а с цветами я бы вместо констант
использовал всё же readonly
|
||||||
|
|||||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
нет конечно, естественно это утверждение было специально усилено для большего воспитательного эффекта. Изредка допустимы и другие числа, но лишь изредка.
Это сообщение отредактировал(а) source777 - 15.8.2008, 11:03 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 10 Всего: 32 |
Вообще-то константами могут быть только примитивные типы, т.к. значение вычисляется при компиляции. В данном случае правильно использовать readonly. Аккуратнее советуйте ![]() -------------------- I don't need a reason being who I am... |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
source777,
Если точки масива не где не сохранять то как я узнаю при выделение попал ли указатель мыши в заданый полигон???? |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Спросишь у того объекта, который знает! -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Ivan182 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.2.2007 Репутация: нет Всего: нет |
source777, не могли бы Вы написать список книг по ООП и программированию вообще, которые Вы считаете просто обязательными для прочтения программисту?
Макконнелл, например, для меня упущение. Это сообщение отредактировал(а) Ivan182 - 27.8.2008, 13:30 |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Я бы особо выделил следующие книги: 1) Совершенный код. Макконнелл 2) Рефакторинг... Фаулер 3) Приемы объектно-ориентированного проектирования... GoF 4) Применение DDD и шаблонов проектирования... Нильссон 5) Применение UML 2.0 и шаблонов проектирования. Ларман 6) Рефакторинг с использованием шаблонов. Кериевски 7) Архитектура корпоративных программных приложений. Фаулер Также можно порекомендовать книги товарищей Гради Буч, Джеймс Рамбо, Ивар Якобсон по ООП и UML, хотя лично мне их стиль изложения не особо импонирует... + книги по алгоритмам (Кнут, Кормен) + позновательное ("Психбольница в руках пациентов" Купер, "Профессиональная разработка программного обеспечения" Макконнелл, etc.) Этот список не столько обязательной(это разве что первые 3 книги) литературы, сколько желательной, т.к. чтобы прочитать всё что я тут указал нужен не 1 год внимательного чтения ![]() P.S. Я сам ещё не весь этот список осилил... ![]() -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
Exai1e |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 4 Всего: 30 |
-------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |