Первый очевидный вопрос: что обозначают
Первый очевидный вопрос: что обозначают все эти числа? Разумеется, можно поискать где-то вверху, но не забывайте, что между описанием класса и его использованием может быть достаточно большой кусок кода. А что будет, если добавить ещё несколько свойств - вращение, цвет, скос, имя?.. Следующий вопрос: что будет, если мы зададим ширину и высоту, а первые два параметра, x и y, оставим заданными по умолчанию? Если даже пользователь впишет null в необходимые позиции, значения установятся в 0, что может отличаться от значений по умолчанию. Другой вариант - передать лишь значения ширины и высоты, вновь создаёт проблему. Как объяснить классу Shape разницу между определением значений ширины, высоты и значений x и y? В конце концов, и те и другие всего лишь пары целых чисел. Это всё равно что, стоя на углу какой-нибудь улицы Ленина, гадать, в каком городе находитесь.
Для начала немного истории (а вы уж подумали, что эта статья не может быть более нудной!). В былые времена, к примеру, при работе с Windows API, мы сталкивались с огромным числом разнообразных параметров: программу можно было писать лишь с несколькими толстенными книгами на коленях. Вот, посмотрите и вспомните:
w = CreateWindow ("button","Click Me",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 100,100,50,50,hWnd, (HMENU) 100, ((LPCREATESTRUCT) lParam)->hInstance,NULL);
В то время, а ведь, возможно, всё это до сих пор хранится где-то глубоко в недрах ОС, видимо, так было нужно, ныне же нам гораздо приятнее смотреть на современный конструктор (взято из .NET, но подобным образом работает и Java, и KDE):
button1 = new Button(); button1.BackColor = SystemColors.Desktop; button1.Size = new Size (176, 56); button1.Location = new Point (168, 168); button1.Text = "Click Me";
Первый пример наглядно демонстрирует, почему атомные реакторы не работают под Windows 3.1. Пораскинув мозгами, из этого можно извлечь несколько полезных уроков. Во-первых, если серьёзных причин для усложнений системы нет, передавайте конструктору только те параметры, которые ему необходимы для создания объекта. Довольно заманчиво выглядит возможность разрешить пользователю передавать параметр Text как аргумент; но тогда почему Text должен быть важнее, чем, к примеру, Location; если же передаются оба параметра, то какой должен передаваться первым? И вообще, позволит ли нам передача этих параметров как аргументов сделать что-либо, кроме того, что задано жёстко (разве что людей запутать?). Короткий ответ: "Нет". Длинный ответ: "Этому не бывать!". Отсюда - правило: если параметр не нужен для создания объекта, не передавайте его в конструктор. (Чуть позже мы рассмотрим "перегрузку конструктора" - общепринятую, хотя и несколько противоречивую технологию, рассматривающую данную проблему с другой позиции.)
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий