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

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

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

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

Имени у анонимного класса нет.Ниже приведен пример использования объектаанонимного класса, реализующего интерфейсстека.interface Stack <T>{void push(T o);Tpop ();}public class B{public void m(){Stack<Integer> s =new Stack<Integer>() {final static int maxSize = 10;int[] values = new int[maxSize];int last = -1;168public void push(Integer i) {if(last + 1 == maxSize)throw newTooManyElementsException();else values[++last] = i;}public Integer pop() {if(last – 1 < -1)throw newNoElementsException();else return values[last--];}};}}s.push(3);s.push(4);System.out.println(s.pop() + 1);В C# 2.0 есть специальная конструкция дляобнуляемых (nullable) типов значений —переменная такого типа может иметь либоопределенное значение, либо не иметьзначения, что представляется как равенствоnull.Эта возможность еще отсутствует в версиистандарта [8], о ней можно прочитать в [9].В основе обнуляемого типа значений всегдалежит обычный тип значений — примитивный,структурный или перечислимый.bool? mayBeNullFlag= null;int? mayBeNullNumber= 5;Point2D? mayBeNullPoint = null;Обозначение T? является сокращением отSystem.Nullable<T>.

Этот тип имеет свойстваHasValue, возвращающее true тогда, когда егозначение является значением типа T, а не null,и Value, возвращающее это значение, если ононе null.Определено неявное преобразование значенийтипа T в T?.Для обнуляемых типов, построенных на основепримитивных, определены все те же операции.Арифметические действия над значениямиобнуляемых типов возвращают null, если одиниз операндов равен null.Сравнения по порядку (<, >, <=, >=) возвращаютfalse, если один из операндов равен null.Можно использовать сравнение значенийобнуляемых типов на равенство илинеравенство null.Для типа bool? операции & и | возвращают неnull, если их результату можно приписать169логическое значение.

Т.е. false & null ==false, а true | null == true. Такжевыполнены равенства, получаемые приперестановке операндов в указанных примерах.Имеется специальный оператор ??,применимый к объектам ссылочных типов илик значениям обнуляемых типов.Значение a??b равно (a != null)?a:b.Кроме перечисленных разновидностей типов, вC# имеется возможность определять ссылочныетипы, являющиеся аналогами указателей нафункцию в C — делегатные типы (delegatetypes).Делегатный тип объявляется примерно так же,как абстрактный метод, не имеющийреализации.Объект делегатного типа можноинициализировать с помощью подходящего потипам параметров и результата метода или спомощью анонимного метода (anonymousmethod, введены в C# 2.0) [9].В приведенном ниже примере объявляетсяделегатный тип BinaryOperation и 6 объектовэтого типа, инициализируемых различнымиспособами.Объекты op1 и op3 инициализируются припомощи статического метода A.Op1(), объектыop2 и op4 — при помощи метода Op2(),выполняемого в объекте a, объекты op5 и op6— при помощи анонимных методов.public delegate int BinaryOperation(int x, int y);public class A{private int x = 0;public A(int x) { this.x = x; }public static int Op1(int a, int b){ return a + b; }public int Op2(int a, int b){ return x + a + b; }public static A a = new A(15);BinaryOperation op1 = A.Op1;BinaryOperation op2 = a.Op2;BinaryOperation op3 =new BinaryOperation(A.Op1);BinaryOperation op4 =new BinaryOperation(a.Op2);BinaryOperation op5 =delegate(int c, int d){ return c * d; };BinaryOperation op6 =delegate { return 10; };}170По идее, объекты делегатных типовпредназначены служить обработчикаминекоторых событий.

Т.е. при наступлениизаданного события надо вызватьсоответствующий делегат.Обработчики событий часто надо изменять входе выполнения программы — добавлять в ниходни действия и удалять другие.Поэтому каждый объект-делегат представляетнекоторый список операций (invocation list). Приэтом пустой список представляется как null.Добавлять элементы в конец этого спискаможно при помощи операторов + и +=,применяемых к делегатам (и методам, которыенеявно преобразуются в объекты делегатноготипа, как видно из инициализации op1 и op2 впримере). При объединении двух делегатовсписок операций результата получаетсяконкатенацией списков их операций — списокопераций правого операнда пристраивается вконце списка операций левого операнда.Списки операций операндов не меняются.Удалять операции из делегатов можно припомощи операторов - и -=.

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

Если объектделегат равен null, в результате вызовавыбрасывается исключение типаSystem.NullReferenceException.using System;public class A{delegate void D();static void M1(){ Console.WriteLine("M1 called"); }static void M2(){ Console.WriteLine("M2 called"); }public static void Main(){171D d1 = M1, d2 = M2;d1 += M1;d2 = d1 + d2 + d1;}}d1();Console.WriteLine("------------");d2();Console.WriteLine("------------");(d1 + d2)();Console.WriteLine("------------");(d1 - d2)();Console.WriteLine("------------");(d2 - d1)();Программа из приведенного примера выдаетследующий результат.M1 calledM1 called-----------M1 calledM1 calledM2 calledM1 calledM1 called-----------M1 calledM1 calledM1 calledM1 calledM2 calledM1 calledM1 called-----------M1 calledM1 called-----------M1 calledM1 calledM2 calledВ следующей лекции продолжается рассмотрение способов описания пользовательских типовв Java и C#.Литература к Лекции 10[1] Страница платформы J2SE http://java.sun.com/j2se/index.jsp.[2] Страница платформы J2EE http://java.sun.com/j2ee/index.jsp.[3] Страница платформы J2ME http://java.sun.com/j2me/index.jsp.[4] Страница платформы Java Card http://java.sun.com/products/javacard/index.jsp.[5] Страница для разработчиков на .NET http://www.microsoft.com/net/developers.mspx.[6] Страница проекта Mono http://www.mono-project.com/Main_Page.[7] J.

Gosling, B. Joy, G. Steele, and G. Bracha. Java Language Specification, 3-rd edition. AddisonWesley Professional, 2005.Доступна как http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf.[8] C# Language Specification. Working Draft 2.7. ECMA, June 2004.Доступна как http://download.microsoft.com/download/8/1/6/81682478-4018-48fe-9e5ef87a44af3db9/standard.pdf.[9] C# Langauge Specification 2.0, March 2005 Draft.Доступна как http://download.microsoft.com/download/8/1/6/81682478-4018-48fe-9e5ef87a44af3db9/CSharp%202.0%20Specification.doc.172[10] The Unicode Consortium.

The Unicode Standard, Version 4.0. Boston, MA, Addison-WesleyDevelopers Press, 2003.[11] IEEE 754-1985 IEEE Standard for Binary Floating-Point Arithmetic. Revised 1990, IEEE, NewYork, 1990.[12] IEC 60559:1989 Binary floating-point arithmetic for microprocessor systems. (2-nd ed.,previously designated IEC 559:1989) International Electrotechnical Commission, 1989.173Лекция 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# (естественно, если оно неперекрыто в каком-то классе, промежуточном между данными предком и потомком). Конструкции174super в Java и base в C# можно использовать и для обращения к операциям, декларированным впредке данного класса.

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

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

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

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

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

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