Главная » Советы

В описание исключения добавляйте информацию о сбое

Добавлено Дата: 16 May, 2011 категория: Java, Советы

 

Если выполнение программы завершается аварийно из-за необработанного исключения, система автоматически распечатывает трассировку стека для этого исключения. Трассировка стека содержит строковое представление данного исключения, результат вызова его метода toString. Обычно это представление состоит из названия класса исключения и описания исключения (detail message). Часто это единственная информация, с которой приходится иметь дело программистам или специалистам по наладке, исследующим сбой программы. И если воспроизвести этот сбой нелегко, то получить какую-либо еще информацию будет трудно или даже вообще невозможно. Поэтому крайне важно, чтобы метод toString в классе исключения возвращал как можно больше информации о причинах отказа. Иными словами, строковое представление исключения должно зафиксировать отказ для последующего анализа.

Читать »

Рассмотрите возможность замены конструкторов статическими методами генерации.

Добавлено Дата: 16 May, 2011 категория: Java, Советы

 

Обычно для того, чтобы клиент мог получать экземпляр класса, ему предоставляется открытый (pubIic) конструктор. Есть и другой, менее известный прием, который должен быть в арсенале любого программиста. Класс может иметь открытый  статический метод генерации (static factory method), который является статическим методом, возвращающим экземпляр класса. Пример такого метода возьмем из класса Boolean (являющего оболочкой для простого типа boolean). Приведенный ниже статический метод генерации, который был добавлен в версию 1.4, преобразует значение boolean в ссылку на объект Boolean:

Читать »

Инициируйте исключения, соответствующие абстракции

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

Если метод инициирует исключение, не имеющее видимой связи с решаемой задачей, это сбивает с толку. Часто это происходит, когда метод передает исключение, инициированное абстракцией нижнего уровня. Это не только приводит в замешательство, но и засоряет интерфейс верхнего уровня деталями реализации. Если в следующей версии реализация верхнего уровня поменяется, то также могут поменяться и инициируемые им исключения, в результате чего могут перестать работать имеющиеся клиентские программы.

Читать »

Соблюдайте осторожность при переопределении метода Сlоnе

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

Интерфейс Сlonеаblе проектировался в качестве дополнительного интерфейса (mixin) (статья 16), позволяющего объектам объявлять о том, что они могут быть клонированы. К сожалению, он не может использоваться для этой цели. Его основной недостаток – отсутствие метода clone; в самом же классе Object метод clone является закрытым. Вы не можете, не обращаясь к механизму отражения свойств (reflection) (статья 35), вызывать для объекта метод clone лишь на том основании, что он реализует интерфейс Сlоnеаblе. Даже отражение может завершиться неудачей, поскольку нет гарантии, что у данного объекта есть доступный метод clone. Несмотря на этот и другие. недочеты, данный механизм используется настолько широко, что Имеет смысл с ним разобраться. В этой статье рассказывается о том, каким образом создать хороший метод clone, обсуждается, когда имеет смысл это делать, а также кратко описываются альтернативные подходы. 43

Читать »

Если требуются точные ответы, избегайте использования типов float и doubIe

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

Типы float и double в первую очередь предназначены для научных и инженерных расчетов. Oни реализуют бинарную арифметику с плавающей точкой (binary f!oating-point arithmetic), которая была тщательно выстроена с тем, чтобы быстро получать правильное приближение для широкого диапазона значений. Однако эти типы не дают точного результата, и в ряде случаев их нельзя использовать. Типы float и double не подходят для денежных расчетов, поскольку с их помощью невозможно представить число 0.1 (или любую другую отрицательную степень числа десять).

Читать »

Всегда переопределяйте метод toStrlng

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

в классе java.lang.Object предусмотрена реализация метода toString, однако возвращаемая им строка, как правило, совсем не та, которую желает видеть пользователь вашего класса. Она состоит из названия класса, за которым следуют символ "коммерческого at" (@) и его хэш-код в виде беззнакового шестнадцатеричного числа, например "PhoneNumbeг@16ЗЬ91". Общее соглашение для метода toString: возвращаемая строка должна быть "лаконичным, но информативным, легко читаемым

Читать »

Соблюдайте осторожность при использовании машинно-зависимых методов

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

Интерфейс Java Native Interface (JNI) дает возможность приложениям на языке Java делать вызов" машинно-зависимых" методов (native method), т. е. специальных методов, написанных на машинно-зависимом языке программирования, таком как С или С++. Перед тем как вернуть управление языку Java, машинно-зависимые методы могут выполнить любые вычисления, используя машинно-зависимый язык.

Читать »

Сводите к минимуму доступность классов и членов

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

Единственный чрезвычайно важный фактор, отличающий хорошо спроектированный модуль от неудачного,- степень сокрытия его внутренних данных и иных деталей реализации от других модулей. Хорошо спроектированный модуль скрывает все детали реализации, четко разделяя свой АРI и реализацию. Модули взаимодействуют друг с другом только через свои API, и ни один из них не знает, какая обработка происходит внутри другого модуля. Эта концепция, называемая сокрытием информации (information hiding) или инкапсуляцией (encapsulatiori), представляет собой один из фундаментальных принципов разработки программного обеспечения [Parnas72].

Читать »

3амеияйте объедииеиие иерархией классов

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

В языке С конструкция union чаще всего служит для построения структур, в которых можно хранить более одного типа данных. Обычно такая структура содержит по крайней мере два поля: объединение (union) и тeг (tag). Тег – это обыкновенное поле, которое используется для указания, какие из возможных типов можно хранить в объединении. Чаще всего тег представлен перечислением (unum) какого-либо типа. Структуру, которая содержит объединение и тег, иногда называют явным объединением (discriminated union).

Читать »

Соблюдайте осторожность при оптимизации

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

Есть три афоризма, посвященных оптимизации, которые обязан знать каждый.

Возможно, они пострадали от слишком частого цитирования, однако при ведем их на тот случай, если вы с ними не знакомы:

Во имя эффективности (без обязательности ее достижения) делается больше вычислительных ошибок, чем по каким-либо иным причинам, включая непроходимую тупость.

Читать »

Указатель на функцию заменяйте классом и интерфейсом

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

Язык С поддерживает указатели на функции (function pointer), что позволяет программе хранить и передавать возможность вызова конкретной функции. Указатели на функции обычно применяются для того, чтобы разрешить клиенту, вызвавшему функцию, уточнить схему ее работы, для этого он передает ей указатель на вторую функцию. Иногда это называют обратным вызовом (callback). Например, функция qsort из стандартной библиотеки С получает указатель на функцию-компаратор (comparator), которую затем использует для сравнения элементов, подлежащих сортировке. Функция-компаратор принимает два параметра, каждый из которых является указателем на некий элемент. Она возвращает отрицательное целое число, если элемент, на который указывает первый параметр, оказался меньше элемента, на который указывает второй параметр, нуль, если элементы равны между собой, и положительное целое число, если первый элемент больше второго. Передавая указатель на различные функции-компараторы, клиент может получать различный порядок сортировки. Как демонстрирует шаблон Strategy [Сатта95, стр. 315], функция-компаратор представляет алгоритм сортировки элементов.

Читать »

Добивайтесь атомарности методов по отношению к сбоям

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

После того как объект инициирует исключение, обычно необходимо, Ч1’обы он оставался во вполне определенном, пригодном для дальнейшей обработки состоянии, даже несмотря на то, что сбой произошел непосредственно в процессе ВЫl1Dлнения -операции. Особенно это касается обрабатываемых исключений, когда предполагается, что клиент будет восстанавливать работоспособность программы. Вообще говоря, вызов метода, завершившийся сбоем, должен оставлять обрабатываемый объект в том же состоянии, в каком тот был перед вызовом. Метод, обладающий таким свойством, называют атомарным по отношению к сбою (failure atomic).

Читать »

Тщательно проектируйте сигнатуру метода

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

В этой статье приводятся советы по проектированию API, не удостоившиеся собственной статьи. Собранные вместе, они помогут сделать ваш АРI не dтоль подверженным ошибкам, более удобным и простым в изучении.

 

 

Читать »

При конкатенации строк опасайтесь потери производительности

Добавлено Дата: 15 May, 2011 категория: Java, Советы

 

Оператор конкатенации строк (+) – удобный способ объединения нескольких строк в одну. Он превосходно справляется с генерацией отдельной строки для вывода и с созданием строкового представления для небольшого объекта с фиксированным размером, но не допускает масштабирования. Время, которое необходимо оператору конкатенации для последовательного объединения строк, пропорционально квадрату числа n. К сожалению, это следствие того факта, что строки являются неизменяемыми (статья 13). При объединении двух строк копируется содержимое обеих строк.

Читать »

При работе с потоками документируйте уровень безопасности

Добавлено Дата: 14 May, 2011 категория: Java, Советы

 

То, как класс работает, когда его экземпляры и статические методы одновременно используются в нескольких потоках, является важной частью соглашений, устанавливаемых классом для своих клиентов. Если вы не отразите эту сторону поведения класса в документации, использующие его программисты будут вынуждены делать Допущения. И если эти допущения окажутся неверными, полученная программа может иметь либо недостаточную (статья 48), либо избыточную (статья 49) синхронизацию. В любом случае это способно привести к серьезным ошибкам.

Читать »