Lecture10 (Лекции по Технологии программирования. Компонентный подход), страница 8

PDF-файл Lecture10 (Лекции по Технологии программирования. Компонентный подход), страница 8 Основы программной инженерии (40584): Лекции - 6 семестрLecture10 (Лекции по Технологии программирования. Компонентный подход) - PDF, страница 8 (40584) - СтудИзба2019-05-12СтудИзба

Описание файла

Файл "Lecture10" внутри архива находится в папке "Лекции по Технологии программирования. Компонентный подход". PDF-файл из архива "Лекции по Технологии программирования. Компонентный подход", который расположен в категории "". Всё это находится в предмете "основы программной инженерии" из 6 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 8 страницы из PDF

Тип массива является ссылочным и определяется на основе типа элементов массива.Количество элементов массива в обоих языках — это свойство конкретного объекта-массива,которое задается при его построении и далее остается неизменным. В обоих языках можно строитьмассивы массивов и пр.В Java можно строить только одномерныемассивы из объектов, которые, однако, самимогут быть массивами.int[] array = new int[3];String[] array1 =new String[]{"First","Second"};int[][] arrayOfArrays = new int[][]{{1, 2, 3}, {4, 5}, {6}};В C# есть возможность строить многомерныемассивы в дополнение к массивам массивов.int[] array = new int[3];string[] array1 =new string[]{"First","Second"};int[][] arrayOfArrays = new int[][]{{1, 2, 3}, {4, 5}, {6}};int[,] twoDimensionalArray =new int[,] {{1, 2}, {3, 4}};Количество элементов в массиве доступно какзначение поля length, имеющегося в каждомтипе массивов.Любой тип массива наследует системному типуSystem.Array, и любой объект-массив имеетвсе свойства и методы этого типа.Общее количество элементов в массиве (во всехразмерностях) доступно как значение,возвращаемое свойством Length.

Количествоизмерений в массиве — значение свойства Rank.В обоих языках есть возможность декларировать перечислимые типы (enums), объектыкоторых представляются именованными константами. Однако реализована эта возможность поразному.В Java перечислимые типы (введены в Java 5)являются ссылочными, частным случаемклассов. По сути, набор константперечислимого типа — это набор статически(т.е. во время компиляции, а не в динамике, вовремя работы программы) определенныхобъектов этого типа.Невозможно построить новый объектперечислимого типа — декларированныеконстанты ограничивают множество еговозможных значений. Любой его объектсовпадает с одним из объектов-констант,поэтому их можно сравнивать при помощиоператора ==.Пример декларации перечислимого типаприведен ниже.В C# перечислимые типы являются типамизначений, определяемыми на основе некоторогоцелочисленного типа (называемого базовым; поумолчанию это int).

Каждая константапредставляет собой некоторое значениебазового типа. Однако можно искусственнопостроить другие значения перечислимого типаиз значений его базового типа.Пример декларации перечислимого типаприведен ниже.public enum Coin{PENNY ( 1),NICKEY ( 5),DIME(10),QUARTER(25);public enum Coin : uint{PENNY= 1,NICKEY = 5,DIME= 10,QUARTER = 25}Coin(int value){ this.value = value; }public int value(){ return value; }private int value;}Как видно из примеров, перечисления в Javaустроены несколько сложнее, чем в C#.Возможны декларации методов перечислимоготипа и их отдельная реализация для каждой изконстант.public enum Operation{ADD {public int eval(int a, int b){ return a},SUBTRACT {public int{ return a},MULTIPLY {public int{ return a},DIVIDE {+ b; }eval(int a, int b)- b; }eval(int a, int b)* b; }public int eval(int a, int b){ return a / b; }};public abstract int eval(int a, int b);}В C# имеется возможность декларироватьпользовательские типы значений, помимоперечислимых.

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

Значениеструктурного типа содержит все значенияполей. При инициализации полей структурыиспользуются значения по умолчанию для ихтипов (0 для числовых, false для логическоготипа, null для ссылочных типов и построенноетак же значение по умолчанию дляструктурных).Пример декларации структуры приведен ниже.public struct Point2D{private double x;private double y;public Point2D(double x, double y){this.x = x;this.y = y;}public double X() { return x; }public double Y() { return y; }}Все структуры считаются наследующимиссылочному типу object, поэтому возможноприведение значения структуры к этому типу.Наоборот, если известно, что данный объекттипа object представляет собой значениенекоторого структурного типа, он может бытьприведен к этому типу.При переводе значений между структурнымтипом и object производятся ихпреобразования, называющиеся упаковкой(autoboxing) — построение объекта, хранящегозначение структурного типа, — и распаковкой(auto-unboxing) — выделение значения изхранящего его объекта.Эти преобразования строят копиипреобразуемых значений.

Поэтому изменениязначения, хранимого в объекте, никак неотражаются на значениях, полученных ранее изнего распаковкой.При присваивании переменной структурноготипа некоторого значения также происходиткопирование этого значения. При присваиваниипеременной ссылочного типа в нее копируетсязначение ссылки, а сам объект, на которыйуказывает эта ссылка, не затрагивается.В Java, помимо явно описанных типов, можноиспользовать анонимные классы (anonymousclasses).Анонимный класс всегда реализует какой-тоинтерфейс или наследует некоторому классу.Когда объект анонимного класса создается вкаком-то месте кода, все описание элементовсоответствующего класса помещается в том жеместе. Имени у анонимного класса нет.Ниже приведен пример использования объектаанонимного класса, реализующего интерфейсстека.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;public 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, если их результату можно приписатьлогическое значение.

Т.е. 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; };}По идее, объекты делегатных типовпредназначены служить обработчикаминекоторых событий.

Т.е. при наступлениизаданного события надо вызватьсоответствующий делегат.Обработчики событий часто надо изменять входе выполнения программы — добавлять в ниходни действия и удалять другие.Поэтому каждый объект-делегат представляетнекоторый список операций (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(){D 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.

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