Lecture11 (1133568)

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

Текст из файла

Технологии программирования. Компонентный подходВ. В. КуляминЛекция 11. Основные конструкции языков Java и C# (продолжение)АннотацияПродолжается рассмотрение основных конструкций языков Java и С#. Рассказывается о правилахописания связей между типами, определения операций над ними и о создании многопоточныхпрограмм. Вкратце рассказывается об основных библиотеках Java и .NET.Ключевые словаНаследование типов, перегрузка операций, поле класса, операция, метод, конструктор,инициализатор, константа, свойство, индексированное свойство, событие, оператор, поток,синхронизация потоков.Текст лекцииВ этой лекции мы продолжаем рассмотрение элементов Java 5 и C# 2.0 на основеописывающих их стандартов [1] и [2,3].НаследованиеОтношение вложенности между типами определяется наследованием. Обычно говорят, чтокласс наследует другому классу или является его потомком, наследником, если он определяетболее узкий тип, т.е.

все объекты этого класса являются также и объектами наследуемого им.Второй класс в этом случае называют предком первого. Взаимоотношения между интерфейсамиописываются в тех же терминах, но вместо «класс наследует интерфейсу» обычно говорят, чтокласс реализует интерфейс.В обоих языках класс может наследовать только одному классу и реализовывать несколькоинтерфейсов. Интерфейс может наследовать многим интерфейсам.Классы, которые не должны иметь наследников, помечаются в Java как final, а в C# какsealed.В Java все классы (но не интерфейсы!)считаются наследниками классаjava.lang.Object.Примитивные типы не являются егонаследниками, в отличие от своих классовоберток.В C# все классы, структурные, перечислимые иделегатные типы (но не интерфейсы!)рассматриваются как наследники классаSystem.Object, на который обычно ссылаютсякак на object.При этом, однако, типы значений(перечислимые и структурные типы,наследники System.ValueType) преобразуютсяк типу object с помощью упаковки, строящейкаждый раз новый объект.Структурный тип может реализовывать одинили несколько интерфейсов, но не можетнаследовать классу или другому структурномутипу.При наследовании, т.е.

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

относится ли оно к самомуклассу или к его объекту. К статическому полю можно обратиться, указав его полное имя, т.е.ClassName.fieldName, к нестатическому полю из кода класса-потомка можно обратиться спомощью конструкций super.fieldName в Java и base.fieldName в C# (естественно, если оно неперекрыто в каком-то классе, промежуточном между данными предком и потомком). Конструкцииsuper в Java и base в C# можно использовать и для обращения к операциям, декларированным впредке данного класса.

Для обращения к полям и операциям самого объекта в обоих языкахможно использовать префикс this —ссылку на объект, в котором вызывается данная операция.Основная выгода от использования наследования — возможность перегружать (override)реализации операций в типах-наследниках. Это значит, что при вызове операции с даннойсигнатурой в объекте наследника может быть выполнена не та реализация этой операции, котораяопределена в предке, а совсем другая, определенная в точном типе объекта.

Такие операцииназывают виртуальными (virtual). Чтобы определить новую реализацию некоторой виртуальнойоперации предка в потомке, нужно определить в потомке операцию с той же сигнатурой. При этомнеобходимо следовать общему принципу, обеспечивающему корректность системы типов в целом— принципу подстановки (Liskov substitution principle) [4,5]. Поскольку тип-наследник являетсяболее узким, чем тип-предок, его объект может использоваться всюду, где может использоватьсяобъект типа-предка. Принцип подстановки, обеспечивающий это свойство, требует соблюдениядвух правил.• Во всякой ситуации, в которой можно вызвать данную операцию в предке, ее вызов долженбыть возможен и в наследнике.

Говоря по-другому, предусловие операции при перегрузкене должно усиливаться.• Множество ситуаций, в которых система в целом может оказаться после вызова операции внаследнике, должно быть подмножеством набора ситуаций, в которых она может оказатьсяв результате вызова этой операции в предке. То есть, постусловие операции при перегрузкене должно ослабляться.Статические операции, относящиеся к классу в целом, а не к его объектам, не виртуальны. Онине могут быть перегружены, но могут быть перекрыты, если в потомке определяются статическиеоперации с такими же сигнатурами.В Java все нестатические методы классовявляются виртуальными, т.е. перегружаютсяпри определении метода с такой же сигнатуройв классе-потомке.Но в Java, в отличие от C#, можно вызыватьстатические методы и обращаться кстатическим полям класса через ссылки на егообъекты (в том числе, и через this).

Поэтомуработу невиртуальных методов можносмоделировать с помощью обращений кстатическим операциям.В C# нестатические операции (обычные методыи методы доступа к свойствам, индексерам исобытиям) могут быть как виртуальными, т.е.перегружаемыми, так и невиртуальными.Для декларации виртуального метода (свойства,индексера или события) необходимо пометитьего модификатором virtual. Метод (свойство,индексер, событие), перегружающий его вклассе-потомке надо в этом случае пометитьмодификатором override.

Если же мы не хотимперегружать элемент предка, а хотимопределить новый элемент с такой жесигнатурой (т.е. перекрыть старый), то его надопометить модификатором new.Элемент, не помеченный как virtual, неявляется перегружаемыми — его можно толькоперекрыть. При вызове операции с такойсигнатурой в некотором объекте будет вызванаее реализация, определяемая подекларированному типу объекта.Приводимые ниже примеры на обоих языках иллюстрируют разницу в работе виртуальных иневиртуальных операций.using System;class A{public void m(){System.out.println("A.m() called");}class A{public virtual void m(){Console.WriteLine("A.m() called");}public static void n(){System.out.println("A.n() called");}public void n(){Console.WriteLine("A.n() called");}}}class B extends A{public void m(){System.out.println("B.m() called");}class B : A{public override void m(){Console.WriteLine("B.m() called");}public static void n(){System.out.println("B.n() called");}public new void n(){Console.WriteLine("B.n() called");}}}public class C{public static void main(String[] args){A a = new A();B b = new B();A c = new B();public class C{public static void Main(){A a = new A();B b = new B();A c = new B();a.m();b.m();c.m();System.out.println("-----");a.n();b.n();c.n();a.m();b.m();c.m();Console.WriteLine("-----");a.n();b.n();c.n();}}}}Представленный в примере код выдаетследующие результаты.Если в приведенном примере убратьмодификатор new у метода n() в классе B, будетвыдано предупреждение о перекрытии имен,возможно случайном.Представленный в примере код выдаетследующие результаты.A.m()B.m()B.m()----A.n()B.n()A.n()calledcalledcalledcalledcalledcalledA.m()B.m()B.m()----A.n()B.n()A.n()calledcalledcalledcalledcalledcalledЭлементы типовЭлементы или члены (members) пользовательских типов могут быть методами, полями (вклассах) и вложенными типами.

В классе можно также объявлять конструкторы, служащие длясоздания объектов этого класса. В обоих языках описание конструктора похоже на описаниеметода, только тип результата не указывается, а вместо имени метода используется имя самогокласса.В обоих языках поля можно только перекрывать в наследниках, а методы можно иперегружать. Вложенные типы, как и поля, могут быть перекрыты.У каждого элемента класса могут присутствовать модификаторы, определяющие доступностьэтого элемента из разных мест программы, а также его контекст — относится ли он к объектамэтого класса (нестатический элемент) или к самому классу (статический элемент, помечается какstatic).Для указания доступности в обоих языках могут использоваться модификаторы public,protected и private, указывающие, соответственно, что данный элемент доступен везде, гдедоступен содержащий его тип, доступен только в описаниях типов-наследников содержащеготипа, или только в рамках описания самого содержащего типа.

Доступность по умолчанию, безуказания модификатора трактуется в рассматриваемых языках различно.Нестатические методы в обоих языках (а также свойства, индексированные свойства и событияв C#) могут быть объявлены абстрактными (abstract), т.е. не задающими реализациисоответствующей операции. Такие методы (а также свойства, индексированные свойства исобытия в C#) помечаются модификатором abstract.

Вместо кода у абстрактного метода сразупосле описания полной сигнатуры идет точка с запятой.Методы (свойства, индексированные свойства и события в C#), которые не должны бытьперегружены в наследниках содержащего их класса, помечаются в Java как final, а в C# какsealed.В обоих языках можно использовать операции, реализованные на других языках.

Для этого вC# используются стандартные механизмы .NET — класс реализуется на одном из языков,поддерживаемых .NET, с учетом ограничений на общие библиотеки этой среды и становитсядоступен из любого другого кода на поддерживаемом .NET языке.В Java для этого предусмотрен механизм Java Native Interface, JNI [6,7]. Класс Java можетиметь ряд внешних методов, помеченных модификатором native.

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

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

Тип файла PDF

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

Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.

Список файлов лекций

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