Главная » Статьи для тега "object"

Байтовые потоки Object в Java

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

 

  Потоки Object— ObjectlnputStream и ObjectOutputStream, — помимо данных стандартных классов (простых типов, строк и их массивов), позволяют вводить и выводить графы объектов (object graphs). Употребляя термин граф объекта, мы имеем в виду, что когда содержимое объекта выводится в поток ObjectOutputStream средствами методов writeObject, в потоке сохраняются наборы байтов, представляющие и текущий объект, и все другие объекты, на который тот ссылается. Процесс преобразования объекта в поток байтов называют сериализацией объекта. Поскольку данные об объекте, подвергшемся сериализации, представляются в форме байтов, в семействе потоков Object отсутствуют символьные разновидности Reader и Writer.

Читать »

Стратегии клонирования Java

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

 

приступая к созданию метода clone какого-либо класса, следует принять к сведению следующие важные соображения.

 

·      Существует пустой интерфейс Cloneable, который необходимо реализовать, чтобы создать метод clone для клонирования объектов класса.1

Читать »

Не попадайте в зависимость от планировщика потоков

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

 

При выполнении в системе нескольких потоков соответствующий планировщик определяет, какие из них будут выполняться и в течение какого времени. Каждая правильная реализация JVМ пытается при этом добиться какой-то справедливости, однако конкретные стратегии диспетчеризации в различных реализациях сильно отличаются. Хорошо написанные многопоточные приложения не должны зависеть от особенностей этой стратегии. Любая программа, чья корректность или производительность зависит от планировщика потоков, скорее всего окажется не переносимой.

Читать »

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

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

 

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

Читать »

Работа с именами и типами компонентов

Добавлено Дата: 10 March, 2011 категория: C#, Компоненты

При необходимости получить компонент по имени или типу используется сервис iReferenceService. Вот его основные методы:

?      метод string GetName (object reference) ВОЗВращает ИМЯ компонента;

?          метод object GetReference(string ла/пе) возвращает компонент по имени. Если компонент с таким именем не найден, метод вернет null;

Читать »

Управление кодом сериализации

Добавлено Дата: 21 February, 2011 категория: C#, Компоненты

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

Читать »

Конвертеры типов

Добавлено Дата: 19 February, 2011 категория: C#, Компоненты

Для того чтобы редактор свойств понял, что наше сложное свойство можно редактировать с помощью редактора строк, необходимо создать специальный класс, называемый конвертером типа (type converter). Конвертер типа является наследником класса System.ComponentModel.TypeConverter. Для реализации полнофункционального наследника необходимо, как минимум, перекрыть следующие методы:

Читать »

Редактирование флагов

Добавлено Дата: 8 February, 2011 категория: C#, Компоненты

В разд. 8.3 я показал, как использовать конвертер Enumconverter при редактировании перечисления. Теперь я хочу рассказать, как редактировать перечисление, если оно отмечено флагом Flags, т. е. возможно выбрать несколько значений перечисления. Разумеется, значения флагов должны иметь значения степеней двойки:

Читать »

Конвертеры типов .NET Framework 2.0

Добавлено Дата: 16 January, 2011 категория: C#, Компоненты

Библиотека .NET Framework содержит множество конвертеров. Я приведу лишь несколько из них:

?  System. ComponentModel.BaseNumberConverter—базовый класс ДЛЯ преобразования числовых значений. От него наследованы многие конвертеры, такие как ByteConverter, DecimalConverter, Intl6Converter И Др.;

Читать »

Использование стандартных редакторов типов

Добавлено Дата: 13 January, 2011 категория: C#, Компоненты

Конечно же, не всегда нужно писать собственные редакторы типов. Часто вполне достаточно стандартных. В этом разделе я хочу рассказать о некоторых из них и возможных проблемах, возникающих при их использовании.

Редактирование коллекций

Читать »

Класс SimplePropertyDescriptor

Добавлено Дата: 12 January, 2011 категория: C#, Компоненты

Как я уже говорил в разд. 4.5, все дескрипторы являются или внутренними, или абстрактными классами, поэтому использовать их "напрямую" не получится, Реализовывать свой дескриптор с нуля— занятие достаточно сложное. Класс TypeConverter содержит внутри себя интересный класс SimplePropertyDescriptor, реализующий большинство необходимых методов дескриптора. Это тоже абстрактный класс, но его наследнику достаточно реализовать всего два метода:

Читать »

Разработка компонентов работы с данными

Добавлено Дата: 1 January, 2011 категория: C#, Компоненты

В качестве примера я покажу компонент BoundListview, который является наследником обычного Listview, но с возможностью привязки данных. Для начала мне потребуются свойства Datasource и DataMember. Их описание достаточно стандартно, и его можно использовать независимо от типа компонента. Описание DataSource выглядит так:

Читать »