Главная » Просмотр файлов » В.В. Кулямин - Технологии программирования. Компонентный подход

В.В. Кулямин - Технологии программирования. Компонентный подход (1134162), страница 7

Файл №1134162 В.В. Кулямин - Технологии программирования. Компонентный подход (В.В. Кулямин - Технологии программирования. Компонентный подход) 7 страницаВ.В. Кулямин - Технологии программирования. Компонентный подход (1134162) страница 72019-05-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

}public PriorityBlockingQueue(int initialCapacity) { … }public PriorityBlockingQueue(int initialCapacity,Comparator<? super E> comparator) { … }public PriorityBlockingQueue(Collection<? extends E> c) { ... }public boolean add(E o) { ... }public Comparator comparator() { … }public boolean offer(E o) { … }public void put(E o) { … }public boolean offer(E o, long timeout, TimeUnit unit) { … }public E take() throws InterruptedException { … }16public E poll() { … }public E poll(long timeout, TimeUnit unit) throws InterruptedException {… }public E peek() { … }public int size() { … }public int remainingCapacity() { … }public boolean remove(Object o) { … }public boolean contains(Object o) { … }public Object[] toArray() { … }public String toString() { … }public int drainTo(Collection<? super E> c) { … }public int drainTo(Collection<? super E> c, int maxElements) { … }public void clear() { … }public <T> T[] toArray(T[] a) { … }public Iterator<E> iterator() { … }private class Itr<E> implements Iterator<E> {private final Iterator<E> iter;Itr(Iterator<E> i) { … }public boolean hasNext() { … }public E next() { … }public void remove() { … }}private void writeObject(java.io.ObjectOutputStream s)throws java.io.IOException { … }}o Адекватность, полнота, минимальность и простота интерфейсов.Этот принцип объединяет ряд свойств, которыми должны обладать хорошоспроектированные интерфейсы.ƒ Адекватность интерфейса означает, что интерфейс модуля дает возможностьрешать именно те задачи, которые нужны пользователям этого модуля.Например, добавление в интерфейс очереди метода, позволяющего получить любойее элемент по его номеру в очереди, сделало бы этот интерфейс не вполнеадекватным — он превратился бы почти в интерфейс списка, который используетсядля решения других задач.

Очереди же используются там, где полнаяфункциональность списка не нужна, а реализация очереди может быть сделанаболее эффективной.ƒ Полнота интерфейса означает, что интерфейс позволяет решать все значимыезадачи в рамках функциональности модуля.Например, отсутствие в интерфейсе очереди метода offer() сделало бы егобесполезным — никому не нужна очередь, из которой можно брать элементы, акласть в нее ничего нельзя.Более тонкий пример — методы element() и peek(). Нужда в них возникает, еслипрограмма не должна изменять очередь, и в то же время ей нужно узнать, какойэлемент лежит в ее начале. Отсутствие такой возможности потребовало бысоздавать собственное дополнительное хранилище элементов в каждой такойпрограмме.ƒ Минимальность интерфейса означает, что предоставляемые интерфейсомоперации решают различные по смыслу задачи и ни одну из них нельзя реализоватьс помощью всех остальных (или же такая реализация довольно сложна инеэффективна).Представленный в примере интерфейс очереди не минимален — методы element()и peek(), а также poll() и remove() можно выразить друг через друга.17Минимальный интерфейс очереди получился бы, например, если выбросить паруметодов element() и remove().Большое значение минимальности интерфейса уделяют, если размер модулейоказывает сильное влияние на производительность программы.

Например, припроектировании модулей операционной системы — чем меньше она занимает местав памяти, тем больше его останется для приложений, непосредственно необходимыхпользователям.При проектировании библиотек более высокого уровня имеет смысл не делатьинтерфейс минимальным, давая пользователям этих библиотек возможности дляповышения производительности и понятности их программ. Например, часто бываетполезно реализовать действия «проверить, что элемент не принадлежит множеству,и, если нет, добавить его» в одном методе, не заставляя пользователей каждый разсначала проверять принадлежность элемента множеству, а затем уже добавлять его.ƒ Простота интерфейса означает, что интерфейсные операции достаточноэлементарны и не представимы в виде композиций некоторых более простыхопераций на том же уровне абстракции, при том же понимании функциональностимодуля.Скажем, весь интерфейс очереди можно было бы свести к одной операции Objectqueue(Object o, boolean remove), которая добавляет в очередь объект, указанныйв качестве первого параметра, если это не null, а также возвращает объект в головеочереди (или null, если очередь пуста) и удаляет его, если в качестве второгопараметра указать true.

Однако, такой интерфейс явно сложнее для понимания, чемпредставленный выше.o Разделение ответственности.Основной принцип выделения модулей — создание отдельных модулей под каждуюзадачу, решаемую системой или необходимую в качестве составляющей для решения ееосновных задач.Пример.Класс java.util.Date представляет временную метку, состоящую из даты и времени.Это представление должно быть независимо от используемого календаря, формызаписи дат и времени в данной стране и часового пояса.Для построения конкретных экземпляров этого класса на основе строковогопредставления даты и времени (например, «22:32:00, June 15, 2005») в том виде, как ихиспользуют в Европе, используется класс java.util.GregorianCalendar, посколькуинтерпретация записи даты и времени зависит от используемой календарной системы.Разные календари представляются различными объектами интерфейсаjava.util.Calendar, которые отвечают за преобразование всех дат в некотороенезависимое представление.Для создания строкового представления времени и даты используется классjava.text.SimpleDateFormat, поскольку нужное представление, помимо календарнойсистемы, может иметь различный порядок перечисления года, месяца и дня месяца иразличное количество символов, выделяемое под представление разных элементов даты(например, «22:32:00, June 15, 2005» и «05.06.15, 22:32»).Принцип разделения ответственности имеет несколько важных частных случаев.ƒ Разделение политик и алгоритмов.Этот принцип используется для отделения постоянных, неизменяемых алгоритмовобработки данных от изменяющихся их частей и для выделения этих частей,называемых политиками, в параметры общего алгоритма.Так, политика, определяющая формат строкового представления даты и времени,задается в виде форматной строки при создании объекта классаjava.text.SimpleDateFormat.

Сам же алгоритм построения этого представленияосновывается на этой форматной строке и на самих времени и дате.Другой пример. Стоимость товара для клиента может зависеть от18•привилегированности клиента, размера партии, которую он покупает и сезонныхскидок. Все перечисленные элементы можно выделить в виде политик, являющихся,вместе с базовой ценой товара, входными данными для алгоритма вычисленияитоговой стоимости.ƒ Разделение интерфейса и реализации.Этот принцип используется при отделении внешне видимой структуры модуля,описания задач, которые он решает, от способов решения этих задач.Пример такого разделения — отделение интерфейса абстрактного спискаjava.util.List<E> от многих возможных реализаций этого интерфейса, например,java.util.ArrayList<E>, java.util.LinkedList<E>.

Первый из этих классовреализует список на основе массива, а второй — на основе ссылочной структурыданных.o Слабая связность (coupling) модулей и сильное сродство (cohesion) функций водном модуле.Оба эти принципа используются для выделения модулей в большой системе и тесносвязаны с разделением ответственности между модулями.

Первый требует, чтобызависимостей между модулями было как можно меньше. Модуль, зависящий отбольшинства остальных модулей в системе, скорее всего, надо перепроектировать —это означает, что он решает слишком много задач.И наоборот, «сродство» функций, выполняемых одним модулем, должно быть какможно выше. Хотя на уровне кода причины этого «сродства» могут быть разными —работа с одними и теми же данными, зависимость от работы друг друга, необходимостьсинхронизации при параллельном выполнении и пр. — цена их разделения должна бытьдостаточно высокой. Наиболее существенно то, что эти функции решают тесносвязанные друг с другом задачи.Так, можно добавить в интерфейс очереди метод void println(String),отправляющий строку на стандартный вывод.

Но он совсем не связан с остальными и сзадачами, решаемыми очередью. Следовательно, трудоемкость анализа и внесенияизменений в полученную систему будет значительно выше — ведь изменения вконтексте разных задач возникают обычно независимо. Поэтому гораздо лучшепоместить такой метод в другой модуль.Переиспользование.Этот принцип требует избегать повторений описаний одних и тех же знаний — в видеструктур данных, действий, алгоритмов, одного и того же кода — в разных частях системы.Вместо этого в хорошо спроектированной системе выделяется один источник, одно местофиксации для каждого элемента знаний и организуется его переиспользование во всехместах, где нужно использовать этот элемент знаний. Такая организация позволяет принеобходимости (например, при исправлении ошибки или расширении имеющихсявозможностей) удобным образом модифицировать код и документы системы всоответствии с новым содержанием элементов знаний, поскольку каждый из нихзафиксирован ровно в одном месте.Примером может служить организация библиотечных классов java.util.TreeSet иjava.util.TreeMap.

Характеристики

Тип файла
PDF-файл
Размер
3,61 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6390
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее