Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > Гляньте код скажите что сделано не грамотно? |
Автор: WaReZMEN 4.8.2008, 13:38 | ||||
Вот сел накидал... незнаю но что то мне подсказывает что сделал что то не так хотя все работает хочу выслушать критику ![]() Главная форма
Основной и единственный Класс
P.S. Всю жизнь писал на дельфи поетому не придераитесь к именам класса и переменным ![]() |
Автор: mr.DUDA 4.8.2008, 14:07 |
Мелкие придирки: - ArrayList заменить на List<TProfil> объектов - в обработчике MouseDown вызывать не Paint класса, а метод Refresh() формы - в метод Paint передавать ссылку на Graphics (брать из e), вместо того чтобы создавать графикс с пом. CreateGraphics |
Автор: jonie 4.8.2008, 22:46 |
1) MngConstruction ConMng; - можно сделать readonly 2) не особо тут много ооп... есть паттерны вроде observer (publish/subscriber), и другие... хотя теже яйца только боком... |
Автор: WaReZMEN 4.8.2008, 23:51 | ||
mr.DUDA,
Просто еще не весь код так как в ArrayList будут не только TProfil но и прочие классы чуток позже дапишу покажу... Про MouseDown и Graphics спасибо учту. И еще стоит ли в класс MngConstruction форму передовать? jonie, спасибо за совет! |
Автор: WaReZMEN 5.8.2008, 09:01 | ||||
Вот последняя версия Главная форма
Класс
Сдесь добавил еще класс TInfill ну и сделал класс TConstructionElement в нем основные своиства каторые есть почти во всех остальных... еще подумываю пренести сюда метод Recalc с пораметром. Что скажете??? Мне чесно нужно мнения грамотных людей. |
Автор: jonie 5.8.2008, 09:54 |
слету : public const int alRigth = 13; -- в enum, жИвотное)! |
Автор: WaReZMEN 5.8.2008, 10:24 |
jonie, чаго??? |
Автор: source777 5.8.2008, 14:01 | ||||||||
+много WaReZMEN, что это за безобразие
Класс должен быть одним единственным АТД, а не кучкой констант или переменных...
Дублирование кода сплошь и рядом, например, фрагменты:
и им подобные многократно встречаются с незначительными вариациями... P.S. Это не ООП вообще, это лишь кодирование с использованием классов, как языковой конструкции. Ты только посмотри сколько у тебя в коде блоков switch!!! |
Автор: WaReZMEN 5.8.2008, 23:57 | ||||
source777, c enum разобрался. public class Const ... я поискал по нету был именно такои савет... Я понимаю что глупость но на тот мамент я других вариантов не знал....
Cдесь убрть сложновато пока даже не вижу как... а вот
Ну от этого никуда не денешся я б с удовольствием сделал переращет какнибудь по другому но подругому не вижу как! P.S. А куда денешся от switch????. В месте с критикои хотелось бы и реальной помощи ![]() |
Автор: WaReZMEN 6.8.2008, 11:15 |
mr.DUDA, Ок учту. |
Автор: source777 6.8.2008, 11:58 | ||||
Ничего сложного тут нет, даже можно сказать, что всё элементарно: 1) читаем, что тебе насоветовал mr.DUDA 2) Заменяем
на
3) дивимся как работает шайтан-машина под названием "полиморфизм". Блин, ну ты про ООП почитай хоть маленько, именно про ООП, а не про синтаксис классов... Про паттерн State для начала, например. |
Автор: WaReZMEN 6.8.2008, 12:18 | ||
source777,
Возможно все это и поможет но по части расчета координат вообще не вижу иного способа.... как там все сложнее чем есть сеичас... позже выложу последний код щас пока подправлю что вы говорите. Кстате спасибо огромное за советы!!! |
Автор: source777 6.8.2008, 13:14 |
Значит сделай, чтобы стало проще. Главное понять, что ты сам всё усложняешь... |
Автор: WaReZMEN 6.8.2008, 14:12 |
source777, а де лучше о паттерн State почитать??? |
Автор: QryStaL 6.8.2008, 14:38 |
WaReZMEN, http://rsdn.ru/res/book/oo/design_patterns.xml |
Автор: source777 6.8.2008, 14:49 |
В книгах по ООА/П, а для начала и http://www.rsdn.ru/article/patterns/State.xml сгодится... |
Автор: Skynin 6.8.2008, 20:02 | ||||
Не об ООП, но нехорошо:
потому что дважды производится преобразование к типу. Нужно:
Подробности: http://www.rsdn.ru/article/dotnet/asis.xml |
Автор: source777 6.8.2008, 20:21 |
да нет, это нехорошо совсем по другой причине: тут вообще в приведении типов никакой надобности нет, а в твоём варианте оно осталось! надобности нет и в публичном свойстве isSelected, это все детали реализации класса и на показ их незачем выставлять, эту логику необходимо перенести в свойство, возвращающее цвет в зависимости от состояния. |
Автор: WaReZMEN 7.8.2008, 00:01 | ||
source777,
Я вот подумывал об этом но теперь точно именно так и сделаю... ![]() |
Автор: WaReZMEN 7.8.2008, 04:17 | ||||
Вот последняя версия на текущий момент класс
Вот форма
|
Автор: source777 7.8.2008, 11:50 | ||
Я вот не пойму ты - совсем ку-ку или прикидываешься? Какой семантический смысл у твоего enum Const ??? Это безумная свалка констант, а не перечисление получилась... P.S. Работа над ошибками не проведена, по прежнему не используется ООП, вообщем крепкая двойка за код! |
Автор: Partizan 7.8.2008, 12:02 |
ггг ) из одного этого безумного enum-a гораздо логичнее сделать четыре, хотя бы разделённых по смыслу ) source777, ну что вы так уж сразу двойки ставите) человек же только учится) так и желание отбить не долго... |
Автор: source777 7.8.2008, 13:10 | ||
Partizan, поздравляю с 1000-ым сообщением ![]()
P.S. Лучше бы он взял маленький кусок своего кода строчек на 100 и довёл его до ума, а не плодил дурнопахнущий код... Тем более что его уже невозможно читать: все классы кроме формы в одном файле, ни единого комментария... А имена переменных - это вообще отдельный ужос, чего только myBrush стоит или tmpInfill.Infill1... |
Автор: WaReZMEN 7.8.2008, 13:15 |
source777, нивижу большого отличия от 4-х enum-a... и кстате к названию просил не предиратся смотрите первый топ.... ну я стораюсь юзать ООП но что еще осталось поскажите .... Partizan, стараюсь двоикои меня не испугаеш... ядумаю строшнеее без ответов в теме две недели ![]() |
Автор: source777 7.8.2008, 13:36 |
Это не придирки, это очень важный момент, а первый топ я смотрел... Жаль только, что из-за таких вот прецедентов ходят слухи, что Delphi-программисты ничего кроме расставления кнопок по формам не умеют... Значит не прикидываешься... Что значит Const.alCenter ? С таким же успехом можно было везде в коде вместо него 10 писать! От замены магического числа на магическое слово ничего не поменялось... Ты не сможешь объявить, находясь в здравом уме, переменную типа Const!!! А введя перечисление Alignment, ты смог бы использовать семантически ясную запись типа: Alignment.Center. Да всё осталось... ты же ничего по сути не исправил.. только синтаксис в паре мест изменил. 90% кода, который ты сюда выкладываешь, никуда не годится, но кто ж будет тебе описывать все недоразумения 500 строк кода, если хочешь можешь выделить любой метод, и я тебе по нему конкретно накидаю кучу замечаний... Попробуй написать с нуля, но на сей раз с учётом ООП... Потому что из запорожца мерседес всё равно не сделать... |
Автор: Partizan 7.8.2008, 13:49 | ||
Ну раз уж на то пошло, то чтобы добиться OOP-style, надо сначала спроектировать приложение, выделить сущности, взаимоотношения между ними..use cases нарисовать в конце концов...а 100 строк доводить "до ума" смысла нет...ибо дабы приложение таки соответствовало концепции ООП, его надо пересматривать в корне и постепенно изменять в сторону ООП...то есть я говорю о том, что взор разработчика должен затрагивать всю систему в целом...как бы воспарить над ней и посмотреть сверху: а какое же оно сейчас моё приложение и какое оно должно быть...а ограничиваться 100 строками кода - эт ни к чему не приведёт ![]() |
Автор: source777 7.8.2008, 14:39 | ||
P.S. А насчёт системы в целом, это UML-диаграммы надо смотреть, код для этой цели вообще не катит... |
Автор: Partizan 7.8.2008, 14:57 |
source777, на самом деле топик изначально некорректно задан) |
Автор: source777 7.8.2008, 17:20 |
Это точно, а в названии темы запятая пропущена и "не" отдельно написано. ![]() |
Автор: source777 7.8.2008, 20:58 |
WaReZMEN, вот тебе список вопросов, пока ты для своего кода не ответишь на все эти вопросы положительно, разговаривать с тобой будет бесполезно... http://ipicture.ru/Gallery/Viewfull/4929090.html P.S. И добавь комментарии к методам и классам!!! |
Автор: WaReZMEN 8.8.2008, 00:03 | ||||
source777, слов нет. Ну я ведь просил не придерется к названиям та как изменить их дело 10 секунд а на данном этапе мне и так понятно что и они обозначают. Я прекрасно понимаю, что здесь можно долго возражать. В дельфи делалось все проще создал юнит там константы объявил и юзаи их де нужно. По поводу списка вопросов вопросы конечно интересные постараюсь ответить. Тем неимение спасибо, что так раскритиковали заставляет задуматься тем ли я занимаюсь… Мож на сварщика пойти… Вот enum переделал так лучше?
Ну имена переменных слабость вечно полчаса сидишь и думаешь как назвать... myBrush ну а как к примеры вы бы назвали??? tmpInfill ну да здесь глупо конечно был еще один вариант xInfill ![]() Infill1 и Infill2 ну здесь вообще другие варианты просто отпадают ибо у каждого infil может быть еще два... |
Автор: Skynin 8.8.2008, 09:22 | ||||||
Я сразу написал, что не бо ООП мое замечание. Потому что в задачу не вникал, чтобы указать где что-то можно реализовать. Такие куски кода разве что будучи тим-лидером буду исследовать.
Приставка my в названиях мне вообще непонятна. К чему "Мои документы", ..., myBrush, myCollection и т.д.? Понятно что если я написал то оно и так - My. В случае же расширения классов конкретно ради специфики задачи и когда на ум ничего не приходит в качестве приставки, или окончания (зависит от пожеланий к сортировке при отображении в IDE) использую название проекта. Обычно 3, 4ре первые буквы. Пример - это тоже проект. Приучайтесь к порядку и конкретике;
Может ![]() Но тут решать нужно - чем больше нравится заниматься. А насчет критики - то напрасно удивляетесь. Иного и быть не могло, даже если бы написали красивейший код. Для того чтобы научиться писать в стиле ООП быстро и надежно (а не долго, от проекта к проекту по капле выдавливая из себя "процедуриста", и периодически впадая обратно) берете - Smalltalk(Cincom'овский например) - и вперед. Там либо ничего не напишете, либо в ООП. |
Автор: WaReZMEN 8.8.2008, 09:56 | ||
Skynin,
Я не против критики ![]() |
Автор: source777 8.8.2008, 10:20 | ||||||
Зачем полчаса придумывать какое-то абстрактное имя для переменной? Если она не имеет чёткого семантического смысла, значит она не нужна, а если имеет, то и назови её исходя из смысла... Смысл твоих переменных неочевиден и не описан в комментариях, поэтому хорошего названия на все случаи тебе никто не предложит, пока ты не разъяснишь конкретную ситуацию.
Добавлено через 5 минут и 10 секунд гораздо лучше, ещё бы приставку ms убрать из значений MouseState, и Align заменить на Alignment, всё-таки существительные в данном случае предпочтительнее. |
Автор: WaReZMEN 8.8.2008, 11:42 | ||||
source777,
Фраза может и не очень, но отражает суровую действительность... Так как что структура такова что самого начала работы программы у нас есть только одно заполнение когда мы кидаем на него Импост наш инфил грубо говоря делится на две части справа от импоста и слева. Так вот мне кажется, что такая структура правильна. Иначе придется сперва заполнение делить на множество вообще на мои взгляд так проще (с двумя инфилами) по поводу Alignment ну я так и сделал сначала а потом посмотрел что в Делфи к примеру это свойство отвевает за выравнивание, а меня как бы к чему прилипает (глупо конечно звучит ) а MouseState уже убрал ![]() Может, поможете мне решить проблему с методом Recalc
Все говорили что много switch и что нужно юзать паттерн State. Почитал я думаю что сдесь он не уместен. Если не прав растолкуйте. Скажу лишь, что это метод вызывается только при созданий экземпляра класса TPrifil это груба говоря, рама окна. |
Автор: source777 8.8.2008, 12:27 | ||
Это всё отмазы, если структура - плохая, то надо сделать хорошую исходя из задачи, а не исходя из структуры. Ты можешь хоть описать, что ты делаешь, нормальным русским языком? Или ты думаешь, что кто-то понял твой код? ![]() ![]() ![]()
|
Автор: WaReZMEN 8.8.2008, 13:20 | ||||||||
source777, еслиб запустили мои код то уивидели бы что я делаю... Это примитивный конструктор пластиковых окон.
Вообщем каждое окно состоит из рамы (я предпоситаю слово каробка TConstraction) стекл (или запонения TInfill) и импостов TImpost перегородок разделяющих раму онка и соответствено стекла (в место одного большого) два поменьше... рама (каробка) состоит из 4-х профилеи (всмысле пластиковых профилеи TProfill). Метод Recal (деиствие или как вы его называете...) для меня это грубо говоря процедура расчета координат профиля для его графического отображения точки он записывает в maspoint...
Parent это какраз сылка на клас TConstraction мы делаем это для того чтоб понят к какой канструкций принадлежит данный профиль... как заменить на набор вычесляемых свойств не знаю как это сделать...
Насамом деле он создается только один раз для конкретного профиля. в дольшеишем нет пересчета...
Центральные точки управления чего? P.S. Вот скрин программы... http://ipicture.ru/Gallery/Viewfull/4978296.html Планируется еще створки добавить предпологаю что класс створок будет наследоватся от TConstraction. |
Автор: source777 8.8.2008, 14:29 | ||||
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 8.8.2008, 14:56 | ||||||||
Названия эти не мной придуманы так они насамом деле называются в производстве оконных пластиковых конструкциях...
Ну потому как был метод Paint в классе MngConstruction (он типа управляющий класс)...
Я упоминул что в будущем будет створка и если мы будем двигать Импост или как вы его назавали Separator то естествено створка будет пересчитыватся.... а вообще можно посомтреть мою прогу работающую на дельфе http://primokna.ru/PrimOknaSoft.exe ну это если интересно...
За это спасибо! Вот только мне лично кажется что к примеру импост (Separator) можно унаследовать от Profile створку от WindowFrame... может я и не прав конечно... Так осталось не понятно как быть с расчетом координат для Profile и прочих элементов? |
Автор: source777 8.8.2008, 15:34 | ||||
|
Автор: SKrivosein 8.8.2008, 15:55 | ||
Спустил твою прогу, не очень понятно что делает.Особенно когда щелкаю на раму, ну становятся синего цвета. ну ладно написано "примитивный". А допиши метод FMain_Paint так:
Небудет так графика мерцать. ![]() |
Автор: QryStaL 8.8.2008, 16:38 |
Эта тема уже разрослась до неимоверных пределов. Я думаю, обсуждение в таком же ключе мало чем поможет - надо перепроектировать. Автору неплохо бы изучить ООП, построить диаграмму классов, взаимодействий и потом уже заняться кодированием. |
Автор: Partizan 8.8.2008, 19:51 |
QryStaL, а я как раз подумал, что автору следовало бы создать новый топик в разделе о проектировании ПО и запостить туда предметную область. Я думаю, что такие корифеи системного анализа как ida, помогут. |
Автор: WaReZMEN 9.8.2008, 00:55 | ||||||
SKrivosein,
это выделения в будущем можно будет посмотреть размеры и тип выбраного профиля.... За код против мерцания отдельное спасибо ![]() source777 ,
Вот если чесно профиль делается из тогоже что и перегородка зазница между ними в ом что у профеля углы скошены а у перегоротки прямые ну и ее можно двигать... Рама тоже 4-х угольная как и створка более того в створке тоже может быть несколько стекл и перегоротка. Воообщем если говорите не нужно наследовать значит не буду... По поводу названий Pane не совсем верно так как в окнах не обязательно стекло может быть... Вообще в пластиковых окнах есть понятие заполнения в него входят стеклопаке (несколько стекл 2-3 и больше) а также сендвич-панель ну прочие не буду вдаватся в детали.... QryStaL,
Ну этим я какраз токи я занялся... по поводу ООП ну какбы я знаю что это такое и с чам это едят... Partizan, ну мне то ножно не готовое решения я хочу понять как должно быть. как говорилось выше программа то работает (просьба не кречать про говнокодерство) и я щас разбераюсь как по правельному должен быть написан подобный код вот и все... |
Автор: Partizan 9.8.2008, 01:10 |
WaReZMEN, а с чего вы взяли что в разделе о проектировании дают готовые решения? всего-то помогут нормальную структуру классов сделать... |
Автор: WaReZMEN 9.8.2008, 01:21 |
Partizan, я что то не видал такого раздела... Ну так я это и пытаюсь сделать следовательно для меня это и будет готовое ришение... |
Автор: Partizan 9.8.2008, 01:49 |
Ладно, не хотите прислушаться, разбирайтесь сами.... |
Автор: WaReZMEN 9.8.2008, 01:56 |
Partizan, я ж говорю не видал такого раздела скажите де н я почитаю что там пишут мож сам все поиму... source777 , если я правельно все понял то получается что то вроде этого http://ipicture.ru/Gallery/Viewfull/5030562.html |
Автор: Partizan 9.8.2008, 10:03 |
http://forum.vingrad.ru/forum/tech-system-analyse-analysis-designing-projection-uml-unified-modeling.html |
Автор: WaReZMEN 9.8.2008, 11:18 |
Partizan, спасибо почитаю... |
Автор: source777 9.8.2008, 16:01 | ||||
Я не говорю, что не надо использовать наследование вообще, но пока не доказано, что объекты связаны отношением "является" наложить запрет на использование наследования вполне разумно.
+ на схеме не отражена композиция в классе Window, о которой я уже говорил. |
Автор: WaReZMEN 10.8.2008, 02:04 | ||
source777,
о Window ну да пока не сделал... По поводу абстрактного класса уже сделал. source777, Спасибо огромное за то что помогаете мне разобратся да и вспомнить что к чему! + |
Автор: WaReZMEN 10.8.2008, 06:04 | ||
source777 Вот накидал побыстрому http://ipicture.ru/Gallery/Viewfull/5160051.html Тока чесно не понимаю нафтга интерфеис использовать? вот код
|
Автор: source777 11.8.2008, 10:12 | ||
P.S. Следующим шагом, спроектируй публичные методы своих классов и опиши их действия на псевдокоде, максимально детализируй псевдокод, но с учётом того, что псевдокод не зависит от языка программирования! |
Автор: WaReZMEN 11.8.2008, 10:22 |
source777, Что имеется ввиду под псевдокодом? Вот последняя диаграмма http://ipicture.ru/Gallery/Viewfull/5294202.html |
Автор: nagg 11.8.2008, 10:22 |
Рекоммендую почитать товарища Макконнелла с его "блокбастером" - Совершенный Код (вопросы по типу "нафига интерфейс" отпадут сами собой) ЗЫ: и про псевдокод там есть : ) |
Автор: WaReZMEN 11.8.2008, 11:16 |
nagg, попобобнее де о |
Автор: source777 11.8.2008, 12:25 |
Стив Макконнелл "The Code Complete" оно же "Совершенный код", кстати список вопросов по качеству классов(см.выше), как раз оттуда ![]() Запись алгоритма на естественном языке, в нашем случае, на русском. Описывать надо то, что будет делать код, а не как он это будет делать. |
Автор: WaReZMEN 11.8.2008, 12:38 | ||
source777, это прям в редакторе тоесть какбы каментрий в классе? так ?
|
Автор: source777 11.8.2008, 20:26 | ||||||
Пример:
........ позже псевдо-код превращается в реальный код, каждой строке псевдокода обычно соответствует 1-7 строк реального кода.
........ Псевдокод помог нам понять, что инициализировать кисти и карандаши жёлтым цветом бессмысленно и не нужно, а также что процедуры построения и заливки полигона лучше централизовать, и создав тем самым точку управления, вынести в базовый класс. Более того, мы видим, что сам метод Draw стал настолько ясным и универсальным, что и сам подлежит выносу в базовый класс как невиртуальный. Методы же DrawPoligon и FillPoligon следует сделать виртуальными. P.S. Идея ясна? теперь пиши псевдокод для всех остальных методов... реальный код пока не пиши (ни в коем случае)!!!. |
Автор: WaReZMEN 12.8.2008, 02:22 | ||
Вот написал
Так теперь диаграма классов выглядит http://ipicture.ru/Gallery/Viewfull/5381091.html |
Автор: source777 12.8.2008, 10:31 |
Название метода предполагает, что он удаляет разделитель, что не согласуется с псевдокодом, надо чтобы согласовалось! либо переименовывай в AddSeparator, либо меняй псевдо-код. В целом уже гораздо лучше, теперь следует выделить каждый класс в отдельный одноимённый файл, затем реализуй абстрактный класс и класс рамы. Кстати методы FillPoligon и DrawPoligon в абстрактном классе надо пометить как abstract, а не virtual... т.к. они на уровне абстрактного класса не могут иметь адекватной реализации. |
Автор: WaReZMEN 12.8.2008, 11:18 |
source777, Так сделал что дальше? |
Автор: source777 12.8.2008, 12:13 |
ну если уверен в реализации, то реализуй остальные классы... |
Автор: WaReZMEN 12.8.2008, 13:27 | ||
source777, Вот реализайция абстрактного класса мне правда кажется нужно еще добавить масив с 4мя координатами для профилеи, стекл и перегоротки. А поповоду класса Рама его нет смысла деть без реализаций класса Профиль.
|
Автор: source777 12.8.2008, 13:56 | ||||
![]()
|
Автор: WaReZMEN 13.8.2008, 10:20 | ||
source777, а можно сдесь поподробнее?
|
Автор: WaReZMEN 14.8.2008, 02:28 | ||
Вот класс Профиль
|
Автор: source777 14.8.2008, 10:16 | ||
Подробнее может быть лишь готовый код, а это ты должен сделать сам. |
Автор: WaReZMEN 14.8.2008, 14:27 |
source777, Это цвета ![]() Я не думаю что существует названия для всех цветов RGB ![]() |
Автор: source777 14.8.2008, 22:13 |
Не переменные а константы, если это действительно константы! Запомни, в коде методов допустимо только два числа 0 и 1, никаких других чисел внутри методов быть не должно! Причём название константы должно означать её смысл, а не значение, поэтому Color.Black тоже не подойдёт! |
Автор: WaReZMEN 15.8.2008, 00:31 |
source777, а разве не понято из левои части this.BorderColor = Color.Black; this.FillingColor = Color.FromArgb(250, 250, 250); this.FillingSelectColor = Color.FromArgb(182, 209, 255); Я конечно вынесу от с названиями этих цветов будут деиствительно проблемы ![]() Спасибо что все еще расказываете что да как ![]() |
Автор: mihryak 15.8.2008, 00:50 | ||||||
а я вот пополам делю порой, это смертельно? ![]() а с цветами я бы вместо констант
использовал всё же readonly
|
Автор: source777 15.8.2008, 10:27 |
нет конечно, естественно это утверждение было специально усилено для большего воспитательного эффекта. Изредка допустимы и другие числа, но лишь изредка. |
Автор: QryStaL 15.8.2008, 10:36 | ||
Вообще-то константами могут быть только примитивные типы, т.к. значение вычисляется при компиляции. В данном случае правильно использовать readonly. Аккуратнее советуйте ![]() |
Автор: source777 15.8.2008, 11:02 |
Спасибо за исправление. ![]() |
Автор: WaReZMEN 17.8.2008, 23:46 | ||
source777,
Если точки масива не где не сохранять то как я узнаю при выделение попал ли указатель мыши в заданый полигон???? |
Автор: source777 18.8.2008, 13:08 | ||
Спросишь у того объекта, который знает! |
Автор: Ivan182 27.8.2008, 13:13 |
source777, не могли бы Вы написать список книг по ООП и программированию вообще, которые Вы считаете просто обязательными для прочтения программисту? Макконнелл, например, для меня упущение. |
Автор: source777 27.8.2008, 16:45 | ||
Я бы особо выделил следующие книги: 1) http://www.ozon.ru/context/detail/id/3159814/?partner=source777 2) http://www.ozon.ru/context/detail/id/1308678/?partner=source777 3) http://www.ozon.ru/context/detail/id/2457392/?partner=source777 4) http://www.ozon.ru/context/detail/id/3570273/?partner=source777 5) http://www.ozon.ru/context/detail/id/3105480/?partner=source777 6) http://www.ozon.ru/context/detail/id/2909721/?partner=source777 7) http://www.ozon.ru/context/detail/id/1616782/?partner=source777 Также можно порекомендовать книги товарищей Гради Буч, Джеймс Рамбо, Ивар Якобсон по ООП и UML, хотя лично мне их стиль изложения не особо импонирует... + книги по алгоритмам (Кнут, Кормен) + позновательное ("Психбольница в руках пациентов" Купер, "Профессиональная разработка программного обеспечения" Макконнелл, etc.) Этот список не столько обязательной(это разве что первые 3 книги) литературы, сколько желательной, т.к. чтобы прочитать всё что я тут указал нужен не 1 год внимательного чтения ![]() P.S. Я сам ещё не весь этот список осилил... ![]() |
Автор: Exai1e 28.8.2008, 07:21 |
заказал ![]() |