Автор будет очень признателен, если Вы кликнете по одной из белых ссылок выше.
Вам это ничего не стоит, а автору сайта будет приятно ;)
Найдено страниц: 60 [показано 10]
Залепа №13. О грамотном проектировании и неграмотном IDE.
Степень соответствия запросу: 53,88%
Фрагменты текста поста : ... такое решение, при котором наша программа не превратится в кашу из кучи классов, лишних открытых методов, свойств и форм... ... Таким образом у нас получается примерно такой открытый интерфейс нашего класса: Набросок класса public class CUserMgr { // получить идентификатор по логину public int GetID(string login) {... ... } } Так же класс должен содержать еще набор закрытых методов для редактирования пользователей: добавление нового пользователя, удаление существующего, изменение параметров пользователя, загрузку и сохранение списка пользователей и т... ... Для целей добавления/редактирования будет использоваться еще одно окошко - форма редактирования пользователя... ... Итак, получаем как минимум две формы, которые должны напрямую обращаться к внутренней структуре класса CUserMgr , т... ... создание глобальных классов нужных нам форм ни к чему хорошему не приведет: о существовании этих форм должен знать только CUserMgr , остальные о них не должны даже подозревать, т... ... Чтобы формы могли обратиться к внутренней структуре класса CUserMgr придется внутреннюю структуру сделать открытой, т... ... Открытая структура класса менеджера приводит к путанице и соблазну использовать эти методы (которые по логике должны быть закрытыми) не по назначению... ... Все это можно перетерпеть если вы создаете класс, который будет использоваться только в вашей программе и код которого никогда не будет использован где-либо еще... ... Вариант номер раз (стиль программирования a'la Microsoft) Суть заключается в избавлении от необходимости использовать одним классом внутренней структуры другого класса... ... Решение сводится к созданию классов, представляющих сущности используя в качестве базы класс формы... ... Нам необходимо создать отдельный класс, представляющий собой запись из БД (информацию об отдельном пользователе)... ... Причем этот класс должен быть порожден от класса Form , чтобы он мог отобразить себя для редактирования данных пользователя... ... Набросаем примерную структуру: Набросок класса записи public class CUser : Form { private string Login... ... Теперь нашему окну редактирования пользователя (классу CUser ) уже не нужно обращаться к классу CUserMgr за информацией - все необходимое он содержит в себе... ... Наш класс менеджера также должен быть наследником класса формы ( Form )... ... список пользователей (объектов класса CUser ) он содержит внутри себя... ... Класс CUser все еще глобален и видим любым и каждым со всеми вытекающими отсюда отрицательными последствиями... ... Вариант номер два (реально объектно-ориентированный) Второй вариант использует возможность C# создавать вложенные классы... ... В C# введена возможность определить класс внутри другого класса... ... При этом встроенный класс получает статус "члена класса-оболочки", т... ... все объекты вложенного класса (кем бы и где бы они не были созданы) имеют ПОЛНЫЙ доступ к членам своего класса-оболочки: они могут использовать и защищенные и даже закрытые методы класса-оболочки... ... } } Итак, вот что мы получаем при таком подходе: программа "видит" только класс CUserMgr , о существовании внутренних классов она даже не подозревает и естественно не может получить к ним доступ... ... Она может использовать только открытый "внешний интерфейс" класса CUserMgr... ... Если внешний интерфейс не изменится, то эти модификации никак не скажутся на работе основной программы, использующей наш класс... ... Встроенные классы могут без проблем обращаться к внутренним (закрытым) методам класса CUserMgr , что позволяет в ряде случаев сильно упростить программирование этих классов... ... Классы, созданные по описанной выше "технологии" будут нормально компилироваться и работать (а как же иначе - все ведь сделано верно, в соответствии с требованиями и возможностями языка C#)... ... Но в IDE вы не сможете использовать визуальный редактор для форм, которые являются вложенными в другие классы (в нашем случае это CUserEdit и CUserList ) - IDE вместо отображения формы просто будет материться по-английски... Подробнее: http://fit-media.com/post_1204892317.htmlЗалепа №9. Microsoft друзей не признает.
Степень соответствия запросу: 18,58%
Фрагменты текста поста : ... Определение класса "календарь" можно было бы даже вложить в определение класса "дата"... ... Другими словами, правильное проектирование в ООП - это создание классов, АБСОЛЮТНО НЕЗАВИСИМЫХ от других классов и объектов, инкапсулирующих все необходимые для работы классы внутри себя... ... Только такой тип проектирования позволяет создавать действительно переносимый код, который без всякой адаптации можно встроить в свою программу... ... // инициализировали другим объектом класса CData (присваивание) cd... ... Естественно, класс CDate должен быть порожден от System... ... Итак, упростим задачу до предела: есть класс CDate , представляющий ни что иное как обычную календарную дату... ... есть класс CCalendar , представляющий собой вспомогательное окно, отображающее календарь и принимающее ввод от юзера... ... Требования к реализации: 1) все операции касающиеся даты, должны выполняться в классе CDate... ... 2) класс календаря, фактически являясь окном, имеет только "оконную" функциональность... ... пользователь нашего класса CDate НЕ должен иметь доступ к функциям внутренней обработки... ... Отсюда вытекают пункты: 3а) класс календаря не должен быть виден пользователю... ... 3б) проект должен иметь некую "модульную" структуру, чтобы встраивание класса CDate в реальную программу было максимально простым... ... Из третьего пункта следует, что объекты класса CCalendar будут создаваться не пользователем, а только классом CDate , им же они будут контролироваться в течении всей жизни календаря и, в конце-концов, он же их будет и уничтожать... ... :( В C++ мы бы просто сделали класс CCalendar другом класса CDate , разрешив тем самым календарю использовать внутренние механизмы в виде вызовов защищенных методов CDate... ... Согласен, решение не самое элегантное, но, поскольку оба класса разрабатываются нами, а пользователи о таком "разделении труда" даже не подозревают (и соответственно не смогут, например, породить наследников от календаря), то такое решение вполне приемлемо... ... Подозреваю, что именно поэтому классы... ... Чем грозит такое "открытие внутренней функциональности" наверное объяснять не нужно: вот есть класс, вот его методы, причем ОТКРЫТЫЕ методы, но пользоваться ими нельзя, т... ... А именно, если распространять свой класс CDate в виде исходников, то он потянет за собой и класс CCalendar , а мы бы не хотели, чтобы пользователь знал о нем... ... Если же скомпоновать наш класс в сборку (assembly), то класс календаря можно сделать ненаследуемым, но при таком подходе пользователю уже не удастся сделать программу из одного exe-файла - придется тягать за собой еще и нашу сборку... Подробнее: http://fit-media.com/post_1199568462.htmlГрамотный интерфейс: поля ввода
Степень соответствия запросу: 6,97%
Фрагменты текста поста : ... Грамотный интерфейс: поля ввода Очень часто в программах данные вводятся в формах, содержащих множество полей: поле фамилии, имени, адреса, номера паспорта, размера обуви... ... Гораздо лучше изначально создать такие условия ввода данных, чтобы подобные ошибки просто не возникали... ... Наиболее популярное на данный момент - разбить форму с десятком полей ввода на несколько форм, по два-три поля в каждом... ... Для интернета это оказывается удобным, но в оффлайновых программах, где вводимых данных гораздо больше, возникает масса проблем: необходимо предусмотреть в каждой следующей форме отображение введенных данных из предыдущих форм, чтобы пользователь мог видеть, что он уже ввел ранее... ... для изменения ранее введенных данных (например неверно введенной фамилии) необходимо сделать в формах навигацию "вперед - назад"... ... проблема "раздутия проекта" из-за создания множества по-сути бесполезных форм... ... Но не стоит делать их яркими как новогодняя елка, а нужно просто слегка изменить цвет, чтобы каждое поле приобрело свой уникальный легкий цветовой оттенок... ... для поиска нужного поля они будут ориентироваться по цвету, а не читать все подряд надписи на форме... ... Раскрасим формы В продолжение идеи предлагаю раскрашивать и формы, в зависимости от выполняемых действий... ... Суть состоит в том, что для ввода новой записи в базу и для редактирования уже введенной записи как правило используется одна и та же форма... ... Так вот, если во время редактирования придать фону формы какой-нибудь оттенок (например сделать ее слегка красноватой), то пользователь, занимающийся только вводом новых данных, сразу же заметит это изменение цвета и не введет по ошибке новые данные поверх старых... ... Когда на форме расположено множество полей, то из-за усталости глаз, не очень хорошего зрения, слишком высокого разрешения монитора и многих других проблем возникает ситуация, когда пользователь не может сразу отпределить позицию коретки ввода - моргающая полоска может быть не заметна... Подробнее: http://fit-media.com/post_1205142560.htmlWindows с маленькой буквы w
Степень соответствия запросу: 5,14%
Фрагменты текста поста : ... Если я подам вам и попрошу пожать свою руку, вы наверное посчитаете странным, если я вдруг отдерну ее и скажу "Подожди, давай пройдем для этого в другую комнату"... ... Современные средства разработки программ позволяют создавать диалоговые окна, но добавление своих элементов управления или создание идиом непосредственной манипуляции (direct manipulation) в них обычно не поддерживается, поэтому разработчик, желающий создать качественный интерфейс, вынужден создавать свои элементы управления... ... Если это программа для рисования, то цель пользователя - создать привлекательное изображение... ... Эти инструменты должны быть встроены в рабочую область программы, точно так как художник разложил бы все свои карандаши, ручки, ножи, резинки и другие инструменты под рукой, на своем столе... ... Если же пользователь решил вставить в свой рисунок другую готовую картинку, эта задача все еще достаточно связана с целью художника – создать красивый рисунок, но для этого нужны другие функции, не относящиеся к рисованию... ... Когда пользователь закончил рисование, он достиг своей начальной цели... ... Он неслучайно оставляет свои инструменты для рисования на столе – он не хочет, чтобы на них попал фиксатор, или краска случайно испортила картину... ... С помощью выяснения целей пользователя мы естественным образом подходим к наиболее подходящей форме программы... ... В Visual Basic, Delphi, C# и других языках легко создавать формы, которые представляют собой независимые окна верхнего уровня... ... Стратегия создания приложения в виде набора форм была довольно спорной, и не применялась широко до тех пор, пока среды разработки не дали возможность создавать окна легко и просто... ... И пусть каждая служит для достижения своей цели... ... Один программист на Visual Basic однажды с гордостью заявил мне, что его программу было особенно тяжело разрабатывать, потому что в ней содержится 57 форм... ... Каждая форма может быть превосходной сама по себе, но все вместе это просто кошмар... Подробнее: http://fit-media.com/post_1204300625.html14 принципов создания вежливых программ
Степень соответствия запросу: 4,79%
Фрагменты текста поста : ... Эти студенты были высокообразованными, зрелыми индивидуумами, но не смотря на это все без исключения отрицали, что благодаря своим познавательным способностям программы воздействуют на них эмоционально, хотя результаты наблюдений являлись неопровержимым доказательство обратного... ... Если программа скупа на информацию, скрывает результаты своей работу, заставляет пользователя искать где находятся простейшие функции, и винит его в своих собственных неудачах, то пользователю она точно не понравится... ... Любой человек, предлагающий какие-либо услуги, попытается запомнить имена и лица своих клиентов... ... Если бы я хотел послать письмо другому Дейву (например Дейву Форе), я бы написал Дейв Ф, Девид Форе или что-то еще, чтобы указать на мой неординарный выбор... ... Нет ничего страшного в том, чтобы программа выразила свое мнение о том, что я сделал ошибку, но она ни в коем случае не должна судить мои действия... ... Например, программа может утверждать, что я не могу отправить заказ, пока не введу свой номер социального страхования, но если я все таки захочу отправить заказ без него, программа должна сделать так как я сказал... ... Если я попрошу свой текстовый процессор распечатать документ, он никогда не сообщит мне, что бумаги осталось мало, или что в очереди уже находятся 40 других документов... ... Хотя любой хороший ресторан позволит вам побывать на своей кухне, но когда вы впервые входите в него, официант, руководствуясь здравым смыслом, проводит вас в обеденный зал... ... Многие из запущенных программ, включая Windows 95, реагируют на смену разрешения изменением размера, формы и положения на экране своих окон... ... Однако когда я меняю разрешение обратно, окна не возвращаются к своим размерам... ... Вежливая программа умалчивает о своих проблемах... ... В баре, салоне и психиатрическом кабинете бармен, парикмахер и доктор будут умалчивать о своих проблемах и показывать интерес в ваших... ... Программы тоже должны молчать о своих проблемах и интересоваться вашими... ... Программа не только должна молчать о своих проблемах, но и должна уметь решать их сама... ... Владельцы магазинов должны держать своих покупателей в курсе того, что может их заинтересовать... ... Я хочу, чтобы он имел смелость в своих убеждениях и удалил файл... ... В любом случае, программа должна быть уверенной в своих действиях, а не перекладывать ответственность на меня... ... Чаще всего система компьютеризируется для увеличения объемов обрабатываемой информации, а не для изменения свой функциональности... ... Для того, чтобы быть подстраиваемой система должна сделать свой внутренний процесс доступным опытному пользователю... ... Поэтому программисты создают свои программы точно такими же... ... Я доверяю банковскому служащему, потому что он улыбается мне, но я всегда пересчитываю свои деньги после банкомата, потому что попросту не доверяю тупой машине... Подробнее: http://fit-media.com/post_1203349390.htmlПользовательский интерфейс
Степень соответствия запросу: 3,42%
Фрагменты текста поста : ... Сама номенклатура принятых в среде Windows интерфейсных элементов вызывает большие сомнения в том, что на ее базе можно создать действительно удобные интерфейсы... ... пользователя, выполняющего на компьютере свою профессиональную работу и, грубо говоря, получающего за это деньги) от пользователя развлекающегося и уж, во всяком случае, не приговоренного к сидению за дисплеем... ... И, главное, эта система хорошо работает и не требует от своих пользователей высшего образования... ... В свою очередь, среда подает человеку разные сигналы... ... То есть из всего разнообразия изобразительных средств - формы, размера, цвета, текста - в кнопках диалогов используется только текст... ... Пользователь простит вам обман, заключающийся в том, что простая на первый взгляд программа постепенно приоткрывает свои новые (в том числе и интерфейсные) возможности... ... Просто всему свое время... ... Прежде чем описывать их, я хочу изложить свою точку зрения на "физику интерфейса", однажды уже опубликованную, но которую уместно здесь повторить... ... Одновременно сменилась форма текстового курсора, и, что очень важно, он начал подмигивать... ... В конце концов, во многих приложениях используются разные формы динамики изображения, которые называются модным словом " мультимедиа "... ... Две анимированные среды интерфейса разработаны в той самой фирме XEROX PARC , которой мы обязаны появлением идеи оконного интерфейса (и даже в группе того самого Стюарда Карда , которому принадлежит авторство этой идеи)... ... Сами файлы из каталога отображаются в виде 3-мерной карусели под своим каталогом... ... Программисты, хвастаясь скоростью своих программ, замеряют время, "теряемое" между картинками... ... При выполнении программой длительных действий курсор мыши приобретает форму песочных часов... ... Так, самое модное сейчас применение компьютеров - блуждание по Сети - имеет тот интерфейс, который вытекает из языка HTML, а он, в свою очередь, производит впечатление "времянки", которая, как теперь ясно, пришла всерьез и надолго... ... Предположим, что ваша фирма выходит на рынок с новой моделью аудиомагнитофона, отличающейся от всех остальных некой возможностью А... Подробнее: http://fit-media.com/post_1204019048.htmlAJAX — WEB 2.0 за 5 минут
Степень соответствия запросу: 2,83%
Фрагменты текста поста : ... на мой взгляд примеры настолько просты и примитивны, что повторить их на своей локальной машине дело пары минут... ... Если у вас есть трудности с javascript, смело вставляйте в свои страницы команду загрузки jQuery и забудьте о своих проблемах... ... Для примера вставим внутрь своей страницы такой код: Пример кода <... ... ) идентификатор или имя класса в формате CSS... ... ) Проблема встает, когда ваша форма содержит десятки элементов ввода &mdash... ... Вместо этого он позволяет создать функцию-обработчик полученных данных... ... /html> Как видите, теперь я создал форму и использовал два поля &mdash... ... считывать данные из полей, этим займется метод serialize(), который сам соберет все данные из формы и упакует их в формат, понятный для метода post()... ... В свою очередь, метод post() (в отличии от load()) не требует обязательного определения целевого контейнера... ... Теперь, если вам нужно передать на сервер больше данных, то просто добавьте в форму сколько угодно полей различных типов (радио-кнопки, текстовые области, пароли, чек-боксы)... ... Здесь нам это нужно, чтобы указать плагину, какую именно форму ему придется обрабатывать... ... выбираем форму и задаем для нее две функции... ... ) плагин возьмет из формы... Подробнее: http://fit-media.com/post_1262093659.htmlМиф о метафоре
Степень соответствия запросу: 1,6%
Фрагменты текста поста : ... Поэтому они создают интерфейсы, которые выглядят как офисы со столами, папками документов, телефонами и адресными книгами, в надежде создать программу с неслыханной легкостью обучения... ... Идея заключалась в том, что здание - это машина для проживания и его форма должна повторять детали реализации... ... Для них важнее выполнять свою работу, а не набираться опыта, что инженерам часто трудно понять... ... Глупо думать, что можно создать хороший интерфейс на основе некоего мысленного волшебства... ... Вы интуитивно понимаете, как работает пиктограмма мусорной корзины потому, что вы уже однажды предприняли попытку понять как работает настоящая мусорная корзина, тем самым подготовив свой мозг для отождествления... ... Синтезированные идиомы - основа продвижения торговой марки продукта, когда компания наполняет свое название или название продукта новым смыслом... ... Самая коварная проблема метафор возникает, если мы привязываем свой интерфейс к артефактам механической эры... ... Он не может хранить больше, чем один объект, не помнит, что хранил ранее, не может определить, откуда взялось изображение, он не может показать вам уменьшенные картинки того, что содержит и не хранит свое содержимое от запуска до запуска системы... ... Он основывается исключительно на метафоре в каждом своем аспекте... ... Вот так и с метафорами: используйте их, если найдете, но не делайте свой интерфейс "заточенным" под какую-нибудь стандартную метафору... ... Создатели телефонов были бы в экстазе, если бы могли создать телефон, по которому можно звонить друзьям, нажимая на их изображения... Подробнее: http://fit-media.com/post_1206190085.htmlОптимизация PHP-кода
Степень соответствия запросу: 1,49%
Фрагменты текста поста : ... Удаляйте свои переменные для освобождения памяти, особенно если это большие массивы... ... Прерывайте свои соединения с БД, когда закончите работать с ними... ... Скорость вызовов метода, не зависит от количества методов в классе... ... Я добавил 10 методов в тестовый класс (до и после тестового метода) и производительность не изменилась... ... Методы в производных классах работают быстрее, чем они же, определённые в базовом классе... ... В некоторых случаях вы сможете ускорить свой код за счёт использования хитрости с isset()... ... Это особая специфика PHP , и не нужно таким образом модифицировать свой C и Java-код думая, что он будет работать быстрее, этого не произойдёт... ... Не определяйте каждую структуру данных в виде класса - массивы бывают намного полезнее... ... Профилируйте свой код... Подробнее: http://fit-media.com/post_1207831883.htmlМаксимум производительности
Степень соответствия запросу: 1,3%
Фрагменты текста поста : ... Избегайте требования от пользователя мысленного преобразования задачи в форму, приемлемую для машины... ... Как только большинство клиентов поймет, что новая система может сберечь их время и деньги, они попытаются уменьшить ее эффективность насколько это возможно, тем самым получая обратно свое время и деньги... ... Например, можно вводить информацию с бумажных форм в компьютер, используя сканер и программу оптического распознавания текста... ... свод правил"... ... Если нужно передать длинную форму после того, как пользователь нажмет Submit , это нужно сделать в фоновом режиме, пока пользователь переходит к следующей форме... ... Когда ожидаемая задержка менее 2 секунд, показывать оставшееся время бессмысленно, поэтому просто измените форму курсора на "... ... Измените форму курсора на "... Подробнее: http://fit-media.com/post_1207048697.html
