Главная » Просмотр файлов » лекции (2010) (by Ульянов Алексей_ Лихогруд Николай_ Сергеев Николай)

лекции (2010) (by Ульянов Алексей_ Лихогруд Николай_ Сергеев Николай) (1160852), страница 12

Файл №1160852 лекции (2010) (by Ульянов Алексей_ Лихогруд Николай_ Сергеев Николай) (лекции (2010) (by Ульянов Алексей_ Лихогруд Николай_ Сергеев Николай)) 12 страницалекции (2010) (by Ульянов Алексей_ Лихогруд Николай_ Сергеев Николай) (1160852) страница 122019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

все объекты в C# и Java и Delphi размещаются в динамической памяти, то в этих языках обязательнаоперация явного размещения объектов:X = new X(); // В Си++ X * a = new X;Синтаксис конструкторов и деструкторов:C++. C#, Java, Dclass X{X(«параметры»);// В С# и Java обязательно определение тела}Delphitype X = classconstructor Create; // Имя конструктора произвольноеdestructor Destroy; // имя деструктора произвольноеend;…..a:X;….a := X.Create;В C++, C#, Java конструкторы не наследуются, но могут автоматически генерироваться компилятором поопределённым правилам.Классификация конструкторов:1. Конструктор умолчания X();2.

Конструктор копирования X(X &); X(const X & );3. Конструктор преобразования X(T); X(T &); X(const T &);В классах из простанства имён System платформы .NetFramework не определены конструкторы копирования.Вместо этого, если это предусмотрено проектировщиками, имеется метод clone();Лекция. Ульянов А.В.П.3. Специальные функции.Конструкторы. Классификация.Объект ссылка.Классификация (С++):1)2)3)4)КУКККПВсе остальное.Почему выделяем КУ в особый класс:X(){…} – выделяется.X(int) – нет.

(Java, C#)Конструкторы либо создаются, либо вызываются.Java, C#, D – в базовом типе object есть конструктор Create и деструктор Destroy. Соответственно здесь ничегосоздавать не надо, они уже есть и наследуются (если).X a; - подразумевается вызов конструктора по умолчанию (неявно).X a(); - нельзя, т.к. это прототип функции.X* px = new X; - нельзя в Java и С#, в С++ - можно.X* px = new X();class X{X();}Class Y:public X{Y(); //Y():X(){} – писать так явно, нельзя, но можно (если определено) Y():X(i){}}В С++: если нет конструктора, то будет сгенерирован.Как: вызов базового конструктора Х, затем под объект и только потом сам конструктор.В общем случае вид конструктора: заголовок [инициализация]Java, C#: Понятие КУ остается.Есть понятие инициализация объектов:class X{Z z = new Z(); // Z z; - значение неопределенно.Int I = 0;}Для базового должен быть конструктор.С#:Y(): base(0) {…} //base – конструктор базового типа.super – ссылка на базовый класс (Java)Вызов: super(…);Вызов конструктора базового класса только у первого оператора.

Если нет, то автоматически подставляетсяконструктор базового класса.КУ – не определяется явно.M-2, Ада:Init(); – явная инициализация.Destroy();КК: Параметр передается по значению.void f(X x);X f() {return X();}X a = b; //Вызов КК. ~ X a(b);Deep (глубокое) и Shallow (поверхностное) copy (копирование).int []a;int []b;a = new int[N];b = a; - поверхностное копирование.Побитовый КК:class X{… //В общем случае КК работает рекурсивно.}class Y: public X{Y Y(&y) {…} //Если этого нет, то вызывается базовый КК.}Общее правило: Если программист не обращается к базовому, то вызывается КК.Y Y(&y):X(y) {…} – КК от базового класса.С#: object.Protected ObjectMembeWizeClone(); По умолчанию копировать нельзя, но в произвольном классе можно самим переопределить.ICLoneable Clone();Java: Интерфейс-маркер.Сloneable; //Семантика зашита в компилятор.protected object Clone();Уровни поддержек:1) Полная поддержка копирования.Class X: Cloneable{ public object Clone() throws {…}}Допускается public X Clone() {…}2) Полный запрет состоит в том, что не реализован Cloneable.class X {public Object Clone() { throw CloneNotSupportedExeption; } }3) Условная поддержка:Для массива: сам массив может поддерживать, а его элементы:class X: Cloneable { public X Clone() throws CloneNotSupportedExeption {…} }4) Не наслед.

интерфейс Cloneableprotected object Clone() {…} //Поддерживает несколько операц. конструкт., не выбрасываетисключений.Метод копирования нельзя переопределять.D: inherited Create; //inherited – вызов соответствующего конструктора.С#: X Z::a(…);static X(…){…}static конструкторы нужны, когда не хватает инициализаторов.Деструктор – функция, которая вызывается автоматически, когда уничтожается объект.С++, D, C# - ОО модель.C#, Java – Автоматическая сборка мусора.D: objectFree, DestroyX := ICreate(…);x.Free;delete p;RAII:X(){RA}~X(){освобождение захваченных ресурсов}{…} освобождение захваченных ресурсов при выходе из блока.При динамической сборке мусора сложно определить, когда объект больше не используется.Image.FromFile(fname);…Image.SaveToFile(fname);Освободить файл можно, когда мы указываем, что с ним не буде работать.Т.е.

сборка мусора здесь не поможет.=> C#, Java:try{…} finally {…}D:try{…} finally…EndТо, что в блоке finally выполняется всегда, даже если было исключение.IDispose - общий интерфейс освобождения памяти.Dispose();try { im = … } finally {im.Dispose;}имя (инициализатор) блокT x = expr;X = expr;~try {инициализатор} finally {x.Dispose;}С#, Java: objectprotected void finalize();public void Close();Есть методики, которые позволяют возродить уничтоженный объект. Но finalize – полностью его удаляет(нельзя вызывать дважды).Close() – ресурсы освобождены.C#: ~X(){…} – нельзя вызывать явно.System.Object.finalize – можно вызвать явно.Сбощик мусора:mark_and_sweepЖивые и мертвые объекты (ссылки).Есть стек, в нем ссылки на объекты.

Если живой, то помечаем и заносим в таблицу живых объектов, остальные– мертвые, они-то и уничтожаются.Можно построить КЭШ объектов. Если объект мертвый, то нм нужен он. Но он еще не утилизирован (неуспели).Strong reference – на живой объект.Weak reference – объект готовится к уничтожение, не пока еще не нуничтожен.Java:Reference (Object o)get – выдает сильную ссылку.clear() – делает ссылку несильной.class DataFromFIle{Public void read() {… d = idData.get(); if (d!=null) return idData;//реальное чтениеidData = new …}Weak Reference idData; //в любой момент может быть уничтожен.

Если пока нет,//то get дает ссылку на объект и делает ее сильной, иначе – null.}Soft Reference(мягкая ссылка) – все ссылки считаются равноправными.Является разновидностью слабой, но удаляются из очереди с самой ранним временем загрузки (дольше всехне использовалась).Преобразования.Неявные (автоматически вставленные компилятором).Int longА может ли их задавать пользователь.C#, Java – неявные преобразования, задаваемые пользователем разрешены.Ф: v = expr – можно считывать различные типы данных.Действительные + комплексные:Ада: ToComplex(A) + x*i*ToComplex(f)*d + …* - можно перегрузить. Тогда в чем проблема?6 видов бинарных операций и много стандартных типов.

Только для умножения ~20. Итого ~120.А можно С*I -> d -> Complex.(d,0) – можно делать автоматически.С++: Страуструп ввел неявные преобразования:char* => string => …operator +(op) {…}C#:static operator+(T t1, T t2){…}static operator*(T t1, T t2){…}Недостаток С++:Class Vector{T* body;int size;public:Vector(int sz) {body = new[size = sz];}}Vector v(20); //okVector t(10);v = t;v =1; ~ v = Vector(1); // Вдруг описались, получилась чушь, но работать будет КП.еxpliced – снимает семантику КП (т.е. конструктор вызывается явно).V = Vecto(1);…C#: иначе,implicitеxplicit – по умолчанию.П.4.

Дополнительные возможности.Свойства (properties).С точки зрения операций – данные,С точки зрения реализации – get, set.D:T Get X() {return _x}void Set X (T value){_x = value;}C#:class X{T prop {get{…} set{…}} //value является зарезервированным в set.}…X a = new X();a.prop = t1;T t2 = a.prop;D:property prop: Tread – заголовок_getwrite – заголовок_setprivate _x: T;public published//все опубликованные свойства появляются в интегрированной среде разработки.property X: T read_x; write_x;C#: Нельзя переопределять [] => понятие индексатор:class X{T this(index){…}}class Outer{…}class Inner{…}Нестатический блок-класс имеет ссылку на Outer.thisInner in = this.newInner();Если public class Inner{…}Outer invoice;Inner = invoice.newInner();Iterable f(object[] objs){class Local: Iterable {int i; Local() {i = 0;}… if (i>objs) …}return new Local(C);}Имеет мест доступ к локальным переменным функции, если в данном блоке не изменяются.delegate int Processor(int i);Prcessor p = new Processor(func);Анонимные делегаты:P = new delegate(int i){…return k+ i;}Анонимные делегаты могут захватывать память.k =0;int j = P(3); //3k = -1;j = P(3); //2Лекция.

Сергеев Николай.«Объект обладает состоянием, поведением ииндивидуальностью».А.БучПримечание: В лекции использовались дополнительные материалы: обе книги Страуструпа(“языкС++” и “Эволюция и дизайн языка С++”), Wikipedia.org , google.ruДоброго времени суток, студенты ВМиК. Данная лекция является предпоследней в цикле лекций поЯзыкам Программирования, и сегодня мы поговорим об Объектно-ориентированном программировании.Надеюсь вы уже сталкивались с этим понятием, изучая материалы 4 семестра, и хорошо знаете чтопрограммировании на С++ подразумевает достаточное хорошее понимание основ объектноориентированного программирования. Ну если нет, то уверен, что после прочтения этой лекции, вы ужедостаточно хорошо будете владеть основами.

Ну что же приступим…Начнем с определения ООП (далее будем использовать такое сокращение для Объектноориентированного программирования):Объектно-ориентированное программирование (ООП) — парадигма программирования, в которойосновными концепциями являются понятия объектов и классов. Если для вас эти слова ничего не значат, торекомендуется вернутся на пару лекций назад и прочесть их, так как незнание такие фундаментальныхпонятий осложнит дальнейшее восприятие материала.Истоки ООП восходят к далеким 70-ым, во времена когда шло бурное развитие языковпрограммирования. Каждый день появлялся хотя бы один язык, и каждый день хотя бы один язык умирал. Вто смутное время группкой ученой была выдвинута идея ООП, которая была отчасти реализована в языкеСИМУЛА-67. Однако реализация та была далеко неполной, и понадобилось целых 13 лет, чтобы придти кпервой полной реализации ООП в языке SmaltalkНа сегодняшний день концепция ООП реализована в таких языках как С++, Java,C#,Ada,ObjectPascal,Turbo Pascal, Delphi, Oberon и в многих других.

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

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

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

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