Московский государственный университет имени М.В.Ломоносова
Опубликован: 18.09.2006 | Доступ: свободный | Студентов: 1870 / 118 | Оценка: 4.32 / 3.36 | Длительность: 27:14:00
ISBN: 978-5-9556-0067-3
Лекция 11:

Основные конструкции языков Java и C# (продолжение)

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

Пакет java.lang.ref содержит классы для организации сложной работы со ссылками.

Например, класс java.lang.ref.WeakReference представляет слабые ссылки.

Другие классы представляют более хитрые виды ссылок.

В C# слабые ссылки реализуются при помощи класса System.WeakReference.

Пакет java.util содержит классы и интерфейсы, представляющие разнообразные коллекции объектов.

Collection<T> — общий интерфейс коллекций Java.

Collections — предоставляет набор общеупотребительных операций над коллекциями: построение коллекций с различными свойствами, поиск, упорядочение и пр.

Set<T>, HashSet<T>, TreeSet<T> — интерфейс множества объектов и различные его реализации. TreeSet<T> требует, чтобы объекты типа T были линейно упорядоченными, и предоставляет быстро работающие (за логарифмическое время от числа объектов в множестве) функции добавления, удаления и поиска.

Map<K, V>, HashMap<K, V>, TreeMap<K, V> — интерфейс ассоциативных массивов или отображений (maps) и его различные реализации. TreeMap<K, V> требует, чтобы объекты-ключи были линейно упорядоченными, и предоставляет быстрые операции с отображением.

List<T>, ArrayList<T>, LinkedList<T> — интерфейс расширяемого списка и различные его реализации.

BitSet — реализует расширяемый список флагов-битов.

IdentityHashMap<K, V> реализует отображение, сравнивающее свои ключи по их совпадению, а не с помощью метода equals(), как это делают остальные реализации Map<K, V> (и Set<T>).

WeakHashMap<K, V> хранит ключи с помощью слабых ссылок, что позволяет автоматически уничтожать хранящиеся в таком отображении пары ключ-значение, если на объект-ключ других ссылок не осталось.

Много полезных классов-коллекций можно найти вне стандартных библиотек, например, в библиотеке Jakarta Commons [12], части обширного проекта Apache Jakarta Project [13].

Набор интерфейсов и классов коллекций C# находится в пространствах имен System.Collections и System.Collections.Generic. В первом находятся интерфейсы и классы нетипизированных коллекций, во втором — шаблоны. Далее упоминаются только шаблонные типы, если их нетипизированный аналог называется соответствующим образом.

Базовые интерфейсы коллекций — Generic.IEnumerable<T>, Generic.ICollection<T>.

Интерфейс отображений и классы, реализующие отображения — Generic.IDictionary<K, V>, Generic.Dictionary<K, V>, Hashtable (нетипизированный).

Интерфейс и классы списков — Generic.IList<T>, Generic.List<T>, ArrayList (нетипизированный).

BitArray — реализует расширяемый список битов.

Для определения линейного порядка на объектах типа T используется интерфейс java.util.Comparator<T>.

Наиболее часто применяется его реализация для строк — java.text.Collator, абстрактный класс, позволяющий создавать специфические объекты, сравнивающие строки в различных режимах, включая игнорирование регистра символов, использование национально-специфических символов и пр.

Аналогичный интерфейс в C# — System.Collections.Generic. IComparer<T>.

Его реализация для строк — абстрактный класс System.StringComparer.

Классы java.util.Calendar, java.util.GregorianCalendar, java.util.Date и java.text.DateFormat используются для работы с датами.

Первые два класса используются для представления информации о календаре, объекты класса Date представляют даты и моменты времени, а последний класс используется для их конвертации в форматированный текст и обратно.

Класса для представления временных интервалов в стандартной библиотеке нет.

Гораздо более широкий набор средств для работы с датами и временами предоставляет библиотека Joda [14].

Для представления различных календарей используются подклассы System.Globalization.Calendar, тоже находящиеся в пространстве имен System.Globalization.

Для представления моментов времени — System.DateType.

Для интервалов времени — System.TimeSpan.

Для форматированного текстового представления дат и времени — System.Globalization. DateTimeFormatInfo.

Классы java.util.Timer и java.util.TimerTask служат для выполнения определенных действий в заданное время или через определенное время.

Аналоги в C# — System.Threading.Timer и делегатный тип System.Threading.TimerCallback.

Еще одни аналоги находятся в пространстве имен System.Timers сборки System.

Для построения и анализа форматированных строк, содержащих данные различных типов, полезен класс java.util.Formatter.

С помощью реализации интерфейса java.util.Formattable можно определить разные виды форматирования для объектов пользовательских типов.

В C# преобразование в форматированную строку осуществляется методом ToString() с параметром типа System.IFormatProvider. Такой метод есть в типах, реализующих интерфейс System.IFormattable.

Обычно в качестве объектов, задающих форматирование, используются объекты классов System.Globalization. CultureInfo, System.Globalization. NumberFormatInfo и System.Globalization. DateTimeFormatInfo.

В пакете java.util есть несколько классов, представляющих регионально- или национально-специфическую информацию

С помощью объектов класса Currency представляют различные валюты.

Информация о региональных или национально-специфических настройках и параметрах представляется в виде объектов класса Locale.

Набор объектов, имеющих локализованные варианты, например, строки сообщений на разных языках, может храниться с помощью подклассов ResourceBundleListResiourceBundle, PropertyResourceBundle.

Аналогичную роль в C# играют классы пространства имен System.GlobalizationRegionInfo и CultureInfo.

Для хранения наборов объектов вместе с их аналогами для нескольких культур используются объекты класса System.Resources.ResourceSet.

Работа с различными кодировками текста организуется при помощи классов пакета java.nio.charset.

Работа с различными кодировками текста организуется при помощи классов пространства имен System.Text.

Интерфейс и классы пакета java.util EventListener, EventListenerProxy, EventObject используются для реализации образца "подписчик" в рамках спецификаций JavaBeans (см. предыдущую лекцию).

Класс java.util.Scanner реализует простой лексический анализатор текста.

Более гибкую работу с регулярными выражениями можно реализовать с помощью классов пакета java.util.regex.

В C# работа с регулярными выражениями может быть организована при помощи классов пространства имен System.Text.RegularExpressions в сборке System.

Пакет java.util.concurrent и его подпакет locks содержат набор классов, реализующих коллекции с эффективной синхронизацией работы нескольких потоков (например, разные потоки могут параллельно изменять значения по разным ключам отображения) и примитивы синхронизации потоков — барьеры, семафоры, события, затворы (latches), блокировки типа "много читателей-один писатель" и пр.

Пакет java.util.concurrent.atomic содержит классы, реализующие гарантированно атомарные действия с данными различных типов.

Аналогичные функции выполняют классы пространства имен System.Threading, расположенные как в сборке mscorlib, так и в System.

Пакет java.io содержит класс File, представляющий файлы и операции над ними, а также большое количество подклассов абстрактных классов Reader и InputStream, предназначенных для потокового ввода данных, и Writer и OutputStream, предназначенных для потокового вывода данных.

Аналогичные классы содержатся в пространстве имен System.IO.

Пакет java.nio содержит классы для организации более эффективного асинхронного ввода-вывода.

Аналоги классов из java.nio находятся в пространстве имен System.Runtime.Remoting.Channels в сборках mscorlib и System.Runtime.Remoting.

Классы и интерфейсы, лежащие в основе компонентной модели JavaBeans, находятся в пакете java.beans.

На основе этой модели реализованы библиотеки элементов управления графического пользовательского интерфейса (graphical user interface, GUI) Java.

Одна из этих библиотек (самая старая и не очень эффективная) размещается в пакете java.awt.

Другая, более новая и демонстрирующая большую производительность — в пакете javax.swing.

Одной из наиболее эффективных библиотек графических элементов управления на Java на данный момент считается библиотека SWT (Standard Widget Toolkit [15]), на основе которой разрабатывается расширяемая среда разработки приложений Eclipse [16].

Классы и интерфейсы, лежащие в основе компонентной модели графических элементов управления .NET, находятся в пространстве имен System.ComponentModel.

Эти классы, в основном, расположены в сборке System.

Библиотека элементов GUI находится в пространстве имен System.Windows.Forms в рамках сборки System.Windows.Forms.

Библиотека классов общего назначения для работы с графикой находится в пространстве System.Drawing в сборке System.Drawing.

Интерфейсы и классы для разработки сетевого ПО и организации связи между приложениями, работающими на разных машинах, находятся в пакетах java.net, javax.net, java.rmi, javax.rmi.

Аналогичные классы и интерфейсы находятся в пространствах имен System.Net и System.Runtime.Remoting в рамках сборок mscorlib и System.

Пакеты java.security, javax.crypto и javax.security определяют основные интерфейсы и классы для поддержки обеспечения безопасных соединений, шифрования, использования различных протоколов безопасности и различных моделей управления ключами и сертификатами.

Аналогичные классы и интерфейсы находятся в пространстве имен System.Security в сборках mscorlib, System и System.Security.

Пакеты java.sql и javax.sql содержат основные интерфейсы и классы для организации работы с базами данных, образующие так называемый интерфейс связи с базами данных JDBC (Java DataBase Connectivity).

Аналогичные библиотеки в .NET находятся в пространстве имен System.Data в сборке System.Data.

Определенные там интерфейсы являются основой ADO.NET.

Пакет javax.naming содержит стандартный интерфейс служб директорий, называемый JNDI (Java Naming and Directory Interface) (см. следующие лекции).

Интерфейс и реализация аналогичной службы директорий ActiveDirectory on Microsoft находятся в пространстве имен System.DirectoryServices в сборках System.DirectoryServices и System.DirectoryServices.Protocols.

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?