Главная страница
Навигация по странице:

  • Диаграмма составной структуры

  • Диаграмма развертывания

  • Диаграмма последовательности

  • Диаграмма обзора взаимодействия

  • Диаграмма синхронизации

  • Figure

  • Рабочая программа по дисциплине Цели и задачи освоения дисциплины Дисциплина Объектноориентированный анализ и программирование


    Скачать 339.98 Kb.
    НазваниеРабочая программа по дисциплине Цели и задачи освоения дисциплины Дисциплина Объектноориентированный анализ и программирование
    Дата12.10.2022
    Размер339.98 Kb.
    Формат файлаdocx
    Имя файлаobektno-orientirovannyj_analiz_i_programmirovanie_161021.docx
    ТипРабочая программа
    #730141
    страница4 из 14
    1   2   3   4   5   6   7   8   9   ...   14
    Диаграмма компонентов (component diagram). Структурная диаграмма, предназначенная для отражения связей между компонентами системы. Особое внимание уделяется интерфейсам, «склеивающим» блоки в цельное представление. В основе данного типа диаграмм лежит понятие «порт». Порт — это окно в инкапсулированный компонент. Совокупность входных и выходных портов образует интерфейс компонента. Допускается изображение компонента как в виде единой сущности, так и в виде композиции частей.

  • Диаграмма составной структуры (composite structure diagram). Предназначены для отображения внутренней структуры классов и взаимодействия их элементов. Как правило, используются совместно с диаграммами классов.

  • Диаграмма развертывания (deployment diagram). Иногда также называются диаграммами размещения. Используются для моделирования физических аспектов объектно-ориентированных систем. Позволяет выполнять анализ работы с учетом аппаратных особенностей размещения программных модулей: топологии узлов, типов межузловых коммуникаций, и так далее. Отражает расположение программных блоков на узлах. В некотором роде является разновидностью диаграммы классов, фокусирующей внимание на аппаратуре. На практике используется крайне редко (в основном при разработке специфического ПО).

  • Диаграмма объектов (object diagram). Применяются при моделировании сущностей классов — объектов. Позволяют получить и проанализировать «снимок» системы в конкретный момент времени. Серия диаграмм классов может быть полезна при моделировании определенного сценария поведения системы. Вплотную соотносится с диаграммой классов (как частное с общим).

  • Диаграмма пакетов (package diagram). При моделировании сложных систем неизбежно приходится работать с большим числом классов. При масштабировании таких систем возникает потребность в укрупнении элементов. Таким «укрупненным» блоком как раз и является пакет — совокупность классов. Элементами пакета являются близкие по своей семантике элементы. Диаграмма пакетов чаще всего применятся при моделировании глобальных свойств системы.

  • Диаграмма профилей (profile diagram). Введена в UML 2.2, до этого заменялась композицией диаграмм других типов. Оперирует понятиями на уровне метамодели объекта анализа. Отражает связь между пакетами и стереотипами.

  • Диаграмма деятельности (activity diagram). Применяется для моделирования динамических аспектов программных систем. Под деятельностью понимается структурированное описание текущего поведения. Представляет собой описание последовательности шагов вычислений. Имеет много общего с традиционной блок-схемой, но в отличие от блок-схем стандарта 19.701-90 позволяет наглядно изображать параллелизм.

  • Диаграмма состояний (state machine diagram). Отображает поток управления от одного состояния к другому внутри объекта. Чаще всего применяется при моделировании реактивных систем. Позволяет изображать динамические аспекты моделируемой системы в виде конечного автомата.

  • Диаграмма прецедентов (use case diagram). Известна также как диаграмма вариантов использования. Основной вид диаграмм для моделирования и анализа поведения системы в целом. В основе лежит понятие «прецедента» — действия, разрешенного в текущий момент времени с учетом текущего состояния системы, приводящего к желаемому результату. Фактически, позволяют описывать всевозможные цепочки воздействий, оказание которых на систему, является допустимым.

  • Диаграмма коммуникации (communication diagram). До UML 2.0 называлась также диаграммой кооперации. Используется для моделирования динамических аспектов системы. Позволяет изображать «раскадровку» поведения. Подчеркивает структурную организацию объектов, обменивающихся

    сообщениями.

    • Диаграмма последовательности (sequence diagram). Применяется для моделирования и анализа динамики развития системы. Схожа с диаграммой коммуникации, но акцент сделан на порядке сообщений.

    • Диаграмма обзора взаимодействия (interaction overview diagram). Позволяет изображать сложные сценарии поведения. Состоит из блоков, описывающих конкретные последовательности действий. По своей сути похожа на диаграмму пакетов, но вместо диаграмм классов преимущественно используются диаграммы коммуникаций и последовательностей.

    • Диаграмма синхронизации (timing diagram). Представляет собой разновидность диаграммы последовательности, позволяет анализировать поведение объектов на определенном временном промежутке. Главное отличие заключается в том, что оси времени и жизни объектов меняются местами.

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

    Диаграммы классов

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

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

    <имя пакетах <имя класса>

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

    <квантор видимостихимя атрибутахкратность атрибута>

    Квантор видимости может принимать одно из следующих значений.

    • Знак «+» означает, что атрибут имеет область видимости public, то есть данный элемент виден всем без исключения сущностям.

    • Знак «-» означает, что атрибут имеет область видимости private, то есть данный элемент виден только внутри методов данного класса.

    • Знак «#» означает, что атрибут имеет область видимости protected, то есть данный элемент виден внутри методов класса и наследующим сущностям.

    Квантор видимости может быть опущен. Допускается непосредственное указание области видимости с помощью ключевых слов public, private и protected.

    Имя атрибута представляет собой простую текстовую метку, однозначно идентифицирующую член класса. Допускается через символ «:» указывать также тип атрибута (например, integer, array, list или hashtable, double, пользовательский класс и так далее).

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

    [<нижняя граница>..<верхняя граница>]

    Нижняя и верхняя Гранины задают диапазон, ограничивающий число элементов. Для указания бесконечного количества применяется символ «*». Кратность атрибута может не указываться, в таком случае она по умолчанию принимается равной одному.

    Третья секция содержит описание методов класса. Каждый метод описывается согласно следующему шаблону.

    <квантор видимостихимя метода>(<параметры>):<возвращаемое значение>{<строка-свойство>}

    Назначение и допустимые (|юрмы квантора видимости метода совпадают с аналогичным полем атрибутов. Данное поле также может быть опущено.

    Имя метода является текстовой меткой и служит для однозначной идентификации сущности. Поле параметров содержит текстовое описание всех сущностей, передаваемых в метод. Каждая такая сущность записывается в соответствии с шаблоном.

    <вид параметраХимя параметра>:<выражение типа>=<значение по умолчаник»

    Вид параметра — это одно из ключевых слов in (по умолчанию), out или inout. Имя параметра задает текстовую метку, идентифицирующую сущность. Выражение типа зависит от конкретного языка про!раммирования. Значение ио умолчанию позволяет явно определить величину, передаваемую в подпрограмму. Из всех перечисленных полей обязательным является только имя переменной.

    Поле возвращаемого значения метода, как следует из названия, используется для указания типа возвращаемого значения.

    Строка-свойство необходима для указания специфических особенностей метода. Так, например, в случае, если метод содержит параллельные участки кода, принято использовать строку вида «{concurrency = concurrent}». При описании класса разрешается опускать вторую и третью секции или третью секцию. Примеры валидных диаграмм классов представлены на рисунке.










    На первом фрагменте диа!раммы представлен абстрактный класс Figure с единственным методом для вычисления площади. На втором фрагменте представлен класс, не содержащий ни атрибутов, ни методов, — соответствующие секции блока опущены. На третьем фрагменте изображен класс Circle с единственным атрибутом. В четвертом примере внимание стоит обратить на способ записи имени класса (прямое указание на пакет) и кванторы видимости атрибутов. В случаях, когда класс принадлежит пакету не верхнего уровня, допускается явно указывать всю цепочку (например, Example.Geometry.Rectangle). Последний фрагмент примечателен тем, что представленный класс включает в себя динамический массив классов Circle — используется поле кратности атрибута (при этом допускается, что данный массив может быть пустым).

    Figure

    Object

    Circle

    + radius

    getSquareQ: double

    Geometry.Rectangle

    • width: double

    • height: double

    + getWidthQ: double

    • getHeightQ: double

    + setWidth(width)

    • setHeight(height)

    EulerVenn

    + circles: Circle [□..’]

    Примеры валидных диаграмм классов



    Изображение интерфейсов выполняется схожим образом, за тем исключением, что имя интерфейса (первая секция блока) указывается в кавычках (например, «autocomplete») или с использованием ключевого слова «interface» перед именем (например, interface autocomplete). Кроме того, секция атрибутов либо не изображается вовсе (таким образом, описание интерфейса состоит лишь из двух секций), либо остается пустой. Второй значимой составляющей диаграммы классов являются связи между классами и интерфейсами. Два класса могут находиться друг с другом в следующих отношениях.

    • Наиболее общим является отношение зависимости (dependency relationship). На схеме для обозначения зависимости используется пунктирная линия со стрелкой на конце. Стрелка указывает направление от зависимого класса к независимому. Допускается указание рядом со стрелкой одного или нескольких (через запятую) ключевых слов (acces, bind, derive, import, refine), характеризующих отношение. При этом используемое слово помещается в кавычки. Типичным примером отношения зависимости является ситуация, когда изменение одного объекта влечет за собой изменение другого. Данное отношение является наиболее общим и все остальные связи между сущностями, по сути, являются его частными случаями.

    • Отношение ассоциации (association relationship) указывает на то, что между классами есть какое-либо отношение. Примером простой ассоциации является связь между классами «преподаватель» и «университет» (преподаватель работает в университете). На схеме подобное отношение отмечается с помощью сплошной дуги со стрелкой. На концах дуги разрешается указывать кратность классов-участников связи. Для указания кратности связи используются те же самые обозначения, что и для указания кратности атрибута. В общем случае допускается использовать N-арную ассоциацию. Такая связь обозначается с помощью присоединения к ромбу сплошными линиями классов-участников связи. Частным случаем рассматриваемой связи является исключающая ассоциация.

    • Отношение агрегации (aggregation relationship) применяется в тех случаях, когда один класс является составной частью другого (часть-целое). На схеме такая связь обозначается с помощью сплошной линии с ромбом на конце, причем ромб указывает на класс-целое. Данный тип отношения позволяет понять из каких составных частей состоит система и отобразить иерархию компонентов.

    • Отношение композиции (composition relationship) является частным случаем отношения агрегации и используется в том случае, когда класс является составной частью другого класса и не может существовать отдельно. Например, комната является частью здания и не может существовать сама по себе (иными словами более общая часть композиции должна иметь квантор кратности 0..1, в то время как общее агрегации может иметь любое значение квантора кратности). Графически отношение композиции изображается точно также, как и отношение агрегации, но с закрашенным ромбом. Допускается заменять композицию агрегацией. Данный тип отношений на практике чаще всего применяется для декомпозиции системы.

    • Отношение обобщения (generalization relationship) применяется для отображения иерархических отношений между классами. Наиболее простой пример такого отношения — связь между классом-родителем и классом-потомком. На диаграмме классов такая связь показывается в виде сплошной линии с треугольником на конце. Треугольник при этом указывает на более общий класс (в предыдущем примере таким классом будет родитель). Допускается объединение стрелок при изображении связей между родителем и несколькими потомками. Рядом с треугольником обобщения разрешено размещать пояснительный текст (например, ограничения вида {complete}, {disjoint}, {incomplete}, {overlapping} и так далее).

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

    Примеры отношений между классами представлены на рисунке.


    Примеры отношений между классами
    Класс Circle является наследником абстрактного класса Figure. Диафамма Эйлера-Вена может включать в свой состав произвольное число окружностей. При этом наиболее важным методом является prinlDiagram, входящий в состав интерфейса Print, который позволяет вывести диаграмму на экран. EulerVenn реализует интерфейс Print. Client взаимодействует (отношение ассоциации) с любым классом, способным осуществлять вывод диафаммы на экран. Численные значения на концах связи указывают на то, что каждому экземпляру клиентского класса соответствует ровно один экземпляр класса-отрисовщика. Обратите внимание на способ изображения комментариев. Представленные выше механизмы позволяют получить статическую картину любой профаммной системы.

    Рассмотрим подробнее классический пример диафаммы классов — структуру высшего учебного заведения. Начнем описание структуры ВУЗа с главной ценности любой организации — людей. Каждый человек имеет имя и дату рождения. Любой человек, имеющий непосредственное отношение к ВУЗу, может находиться в нем на одном из двух положений: сотрудник или обучающийся.

    Если человек является сотрудником, то он обязательно имеет конкретно место работы — какое-либо подразделение ВУЗа (кафедра, отдел и так далее). Кроме того, каждый сотрудник работает на определенной должности (преподаватель, бухгалтер, вахтер и тому подобное). Если работник занимается преподавательской деятельностью, то он обязательно занимает определенную профессорско-преподавательскую должность (ассистент, преподаватель, старший преподаватель, доцент, профессор), имеет ученое звание и ученую степень. Схематично все вышесказанное можно представить следующим образом.


    Диаграмма классов, отражающая положение преподавателя в ВУЗе
    На данной диаграмме представлена группа классов, отражающих положение преподавателя.

    Абстрактный класс People

    представляет собой абстракцию любого человека. Его

    непосредственный наследник — класс Worker — соответствует работнику ВУЗа. Любой работник может занимать одну или несколько должностей, иметь определенное место работы, а также установленное число рабочих дней в неделю (как правило, пять или шесть). Абстрактный класс Position соответствует должности. Поле name определяет название должности, а поле rate необходимо для регулирования объема занимаемой ставки. Класс RecordManager, наследник Position, является абстракцией должности

    «документовед» и подробно здесь не рассматривается. Lecturer — класс, описывающий преподавателя. Членами класса, характерными только для представителей профессорско-преподавательского состава, являются занимаемая должность (ассистент, преподаватель, доцент и так далее), ученая степень и ученое звание. Абстрактный класс Degree имеет единственное поле типа Science — указание на раздел науки, по которой присуждена ученая степень. Необходимо также отметить, что предлагаемая структура допускает возможность наличия у преподавателя более одной ученой степени (например, кандидат технических наук и доктор физико-математических).

    Представленная диаграмма

    описывает структуру подразделений ВУЗа. Абстрактный класс Workplace соответствует отдельному

    подразделению. Существенными

    свойствами любого отдела являются его название, адрес и тип (учебное, административное, хозяйственное и так далее). Одним из наиболее важных подразделений любого ВУЗа является кафедра. Кафедра может быть выпускающей или общеобразовательной (поле islssuer). Будучи отдельным элементом структуры ВУЗа, кафедра в то же время обязательно входит и в состав какого-либо факультета. Причем, как правило, факультет включает в свою структуру несколько кафедр.


    Диаграмма классов, соответсвующая структуре подразделений
    Данная диаграмма представляет собой абстракцию студента как участника образовательного процесса. Безусловно, каждый студент имеет имя и дату рождения, поэтому класс Student, как и класс Worker, является наследником абстрактного класса People. Студент, поступая в ВУЗ, явным образом выбирает факультет (поле faculty), на котором он будет учиться, а также неявным образом (в зависимости от выбора направления обучения) кафедру (поле department), сотрудники которой будут преподавать профильные предметы. Также студент характеризуется специализацией (то есть той профессией, название которой будет указано в его дипломе). Абстрактный класс FieldOfStudy как раз и соответствует этой специализации (примером конкретной специализации является наследник FieldOfStudy — класс



    Диаграмма классов, отображающая положение студента

    обучения (поле year) и требует фиксированного числа
    ComputerScienceAndEngineering). Она имеет название (поле name), нормативный срок обучения по учебному плану (year). Для успешного завершения обучения студент должен освоить ряд дисциплин (массив disciplines класса FieldOfStudy). Каждая дисциплина преподается на определенном го часов для своего освоения (поле hour). Кроме того, любую дисциплину преподает сотрудник университета.


    Диаграмма классов, соответствующая ВУЗу
    Обратите внимание на тот факт, что преподавать дисциплину может только сотрудник из числа ППС (штатный бухгалтер ВУЗа не может обучать менеджеров бухгалтерскому учету не будучи сотрудником какой-либо кафедры), а одна и та же дисциплина может быть необходима студентам разных направлений.

    Теперь можно изобразить диаграмму всего ВУЗа в целом.

    ВУЗ имеет название (поле name), год основания, которым, безусловно, гордится (поле year), сотрудников и обучающихся (поле people). Кроме того, ВУЗ может быть представлен как совокупность подразделений (поле workplaces). Важным атрибутом ВУЗа является его тип — институт, академия или университет. Остается добавить, что представленная схема никоим образом не претендует на полноту описания структуры высшего учебного заведения. Цель приведенного примера — показать на практике процесс объектно-ориентированного проектирования.

    Контрольные вопросы по Теме 2

    1. Какие методологии проектирования легли в основу UML? В чем их особенности?

    2. Как называется организация, управляющая процессом развития UML в настоящее время?

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

    4. Как Вы понимаете термин «пакет»?

    5. Из какие блоков состоит описание класса на диаграмме классов?

    6. Как Вы понимаете термин «квантор видимости»?

    7. Для каких целей при описании методов используется строка-свойство?

    8. Каким образом на диаграмме классов выполняется описание интерфейсов?

    9. Какие отношения между классами Вам известны? В чем их особенности?

    10. Какие ошибки и неточности в диаграмме, описывающей структуру высшего учебного заведения, Вы заметили? Какие элементы, по Вашему мнению, необходимо добавить в описание структуры ВУЗа?

    Выводы после Темы 2

    • UML — общепринятый язык графического описания программных систем.

    • UML позволяет значительно упростить этап проектирования программных систем.

    • Описание системы на языке UML представляет собой совокупность специализированных структурных и поведенческих диаграмм.

    • Центральным типом диаграмм является диаграмма классов.

    Тема 3. «Язык программирования Java»

    На сегодняшний день рынок языков программирования предоставляет огромное количество инструментов для разработки ПО: начиная от процедурных и заканчивая функциональными языками программирования. Существуют также и полностью объектно-ориентированные языки, примерами которых могут служить Java и С#. Изучение особенностей таких языков помогает разобраться в нюансах объектно-ориентированной парадигмы.

    В данной теме предлагается небольшое введение в язык программирования Java. Выбор в пользу этого языка сделан по ряду причин, среди которых не последнее место занимает кроссплатформенность. Во время изучения данного материла при возникновении вопросов настоятельно рекомендуется обращаться к книгам Г. Шилдта «Полный справочник по Java» и Г. Хорстманна «Java».

    История развития и характеристика языка

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

    Java в некотором роде является «наследником» C++, который в свою очередь обязан своим происхождением языку С.

    В 1970-ых в мир программирования пришел к патовой ситуации. Сложность решаемых задач росла быстрее, чем совершенствовался программный инструментарий. Существующие и популярные на то время языки программирования (Basic, COBOL, FORTRAN) были неудобны для создания больших программ: поток управления в них был чрезмерно запутан, частое применение оператора goto затрудняло понимание программного кода. В то же время структурные языки программирования (такие, как Pascal) не обладали рядом необходимых свойств для написания широкого крута программ. Сложившаяся ситуация явилась главной причиной компьютерной революции 1970-ых — массовой разработке новых инструментов и сред программирования. Язык С был создан в начале 70-ых годов прошлого века сотрудниками Bell Labs Деннисом Ритчи и Кеном Томпсоном. Бытует мнение, что С — это первый язык программирования, созданный программистами для программистов. Он успешно объединил в себе все необходимые компоненты, был прост в изучении и позволял решать сложные задачи. Все это сделало С самым популярным языком того времени.

    Следующим значимым шагом в развитии языков программирования было появление языка C++. В определенный момент мощности С стало не хватать: структурный подход не позволял справляться с растущей сложностью задач, требовался больший уровень абстракции. Именно в этот момент на лидирующие позиции выходит парадигма объектно-ориентированного программирования. C++ был предложен в 1979 году сотрудником Bell Labs Бьерном Страуструпом. Главной причиной успешного распространения C++ явилось то, что он изначально создавался как расширение С и был полностью совместим с ним. Даже первоначальное название языка звучало как «С with classes». Этот факт позволял разработчикам на С легко мигрировать на C++.

    Как это ни странно, но причиной возникновения Java стали растущие потребности Интернета. Первая работающая версия языка появилась в 1995 году, хотя разработка была начата еще в 1991 году. Основным создателем языка являлся Джеймс Гослинг.

    Первоначально этот язык носил название «Оак» и был предназначен для создания программного обеспечения, встраиваемого в бытовые устройства (стиральные машины, кофеварки, холодильники, СВЧ-печи и тому подобное). Дело в том, что для управления подобными устройствами используются различные микропроцессоры, отличающиеся набором команд. Этот факт привел к необходимости разработки языка программирования, способного создавать независящие от аппаратной платформы программы. Именно эта особенность придала языку Java одну из самых важных особенностей — кроссплатформенность. Java относится к малой группе языков, обеспечивающих «честную» кроссплатформенность. Программа, написанная на Java будет работать практически на любой современной популярной платформе сразу же, в то время как программа, написанная, например, на C++ (кроссплатформенный на уровне компилятора язык) потребует перекомплияции.

    Чуть позже разработчики языка поняли, что Java идеально подходит для создания переносимых приложений, в которых остро нуждался стремительно набирающий популярность Интернет. Функциональные характеристики Java были скорректированы в сторону «полезности» для World Wide Web. Все это позволило выйти Java на передний рубеж программирования.

    Хотя Java тесно связан с C++, имеет похожий синтаксис и использует ряд других атрибутов C++, существующее мнение о том, что Java является всего лишь Интернет-версией C++ в корне неверно. Несмотря на сходство этот язык имеет принципиальные концептуальные отличия. Ошибочно также считать, что Java — язык для разработки только для Интернета. На сегодняшний день Java позволяет с легкостью разрабатывать программное обеспечение для смартфонов, планшетов и настольных компьютеров.

    С момента выхода версии 1.0 и по сей день Java стремительно развивается. Хотя первая версия языка не произвела революции, но уже выпущенная спустя два года (в 1997 году) версия 1.1 привлекла к себе пристальное внимание профессионалов. Внесенные изменения (поддержка awt, RMI, JDBC, внутренних классов, ограниченной рефлексии) были нехарактерны для изменения всего лишь второй цифры номера версии. В конце 1998 года появилась версия языка 1.2, позже названная Java2, привнесшая еще больше изменений, среди которых особенно стоит выделить поддержку коллекций и технологии swing. Java2 легла в основу дальнейшего развития языка. Версии 1.0 и 1.1 с тех пор принято называть Javal. В 2000 и 2002 годах были выпущены версии 1.3 и 1.4 соответственно. В 2004 году вышла версия 1.5, привнесшая в спецификацию языка перечисляемые типы, поддержку аннотаций, средств обобщенного программирования и методов с произвольным числом параметров. В 2006 и 2011 годах увидели свет версии 1.6 и 1.7. Наиболее важными улучшениями стали расширенная поддержка сетевых протоколов, новая версия библиотеки ввода-вывода, сжатые 64-битные указатели, улучшенное управление возможностями GPU.

    Рассмотрим коротко наиболее важные особенности, характеризующие язык Java.

    • Java, как уже было сказано выше, является кроссплатформенным языком.

    • Java — это полностью объектно-ориентированный язык.

    • В то же время Java — структурный язык.

    • Java — строго типизированный язык.

    • Java поддерживает парадигму императивного программирования.

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

    • Java прост и интуитивно понятен в изучении. Программист, знакомый с каким-либо языком программирования без труда освоить Java (особенно, если этот язык С или C++).

    • На Java можно создавать многопоточные приложения. Простой и изящный механизм, предложенный разработчиками языка, позволяет программистам сконцентрироваться на конкретном поведении многопоточной программы, а не на создании многозадачной подсистемы.

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

    • Java имеет распределенный характер. Поддержка RMI (remote method invocation) позволяет выполнять методы по сети.

    • Java управляет памятью (используется специальный механизм сборки мусора). Это, а также то, что запускаемый код проверяется нс только во время компиляции, но и во время запуска, позволяет предотвратить ряд наиболее частых ошибок, приводящих к сбоям. Код Java предсказуемый, поэтому Java — устойчивый язык программирования.

    • Java — интерпретируемый язык. Программа, написанная на этом языке, компилируется в байт-код, который представляет собой унифицированную форму записи, схожую с машинным представлением. Байт-код интерпретируется и выполняется с помощью специализированного программного обеспечения — виртуальной машины JVM (java virtual machine). Именно эта особенность языка гарантирует

    кроссгглатформснность программ. Все различия между аппаратными (архитектура центрального процессора) и программными (особенности работы операционных систем) платформами устраняются на этапе разработки JVM. Таким образом, программист, используя API Java, не задумывается о том, как та или иная функция будет выполняться на другой платформе. Всю работу по реализации предоставляемого API уже взяли на себя создатели конкретной JVM. Безусловно, интерпретация сказывается на скорости работы java-программ, однако потери производительности на сегодняшний день в большинстве случаев нс настолько существенны, чтобы их было необходимо принимать в расчет.

    • Программы Java используют большое количество информации времени выполнения. Это позволяет безопасно выполнять динамическое связывание кода, а значит небольшие фрагменты кода (на самом деле — только байт-кода) могут быть обновлены в процессе выполнения программы.

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

    Запуск программ

    Для компиляции (напомним, что под термином «компиляция» подразумевается процесс генерации байт-кода) и запуска программ, написанных на языке прог раммирования Java необходимо, чтобы в системе присутствовал jdk (java development kit), последнюю версию которого всегда можно получить на сайте Oracle Corporation. Вообще, JVM существует в двух вариантах — для пользователя (jre —java runtime environment) и для разработчика (jdk). В случаях, когда требуется только интерпретация уже подготовленного байт-кода, можно обойтись только jre, однако, но возможности, рекомендуется использовать jdk.

    Процесс генерации байт-кода может быть запущен из командной строки с помощью команды «javac <имя файла>», где в качестве параметра «имя файла» необходимо указать абсолютный или относительный путь до заранее подготовленного файла с исходным кодом.

    Рассмотрим в качестве примера такую программу.

    public class Example {

    1   2   3   4   5   6   7   8   9   ...   14


  • написать администратору сайта