Step 2 (S-11079)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/562/step/2

Step 2 (S-11079) 1.png

[00:00 - 00:15] content и на неделе давайте обсудим 1 классический пример использования статических методов и статических локальных переменных этот пример это реализация шаблона проектирования синглтон шалом противник синглтоны применяется в тех случаях когда в программе


[00:15 - 00:35] может быть не больше 1 экземпляра некоторого класса например если класс описывает операционную систему которых допущена положение то довольно странно если в программе одновременно будет несколько объектов представляющих доступ к этой операционной системы потому что операционная система она по определению единственно то есть то операционной системы которые допущена данное приложение


[00:35 - 00:52] этому странно если в программе одновременно есть несколько экземпляров этой операционной системы которая по определению единства это касается и других сущностей которые по своей натуре присуще программистам числе например если наша программа работает с 1 единственной базы данных


[00:52 - 01:09] что довольно странно если в программе одновременно будет несколько объектов представляющих доступ к это единственный базе данных такие классы в которых может быть не более 1 объекта называется синглтону давайте разберемся как такие классы реализуется все + + как для них гарантировать что


[01:09 - 01:26] программа будет не более 1 объекта данного класса посмотрим это на примере класса singleton название шаблона проектирования давайте обсудим что же нужно сделать для того чтобы гарантировать что у данного класса будет не более 1 объекта ну во 1 надо запретить любому внешнему коду


[01:26 - 01:42] создавать экземпляр данного класса мы не можем контролировать и если мы это не запретим явно то любой внешний код можно создать это данного класса и таким образом нарушить ограничения на единственном экземпляре для этого мы


[01:42 - 01:58] сделаем приватными во 1 конструктор по умолчанию таким образом никто не создаст экземпляр данного класса если у вас есть какие то другие конструкторы ответил в приватной а во 2 мы объявим но неопределим


[01:58 - 02:14] конструктор копирования если другие конструкторы еще могут быть ток конструктор копирования я ничего не бесполезна это наш класс будет иметь не более 1 экземпляра то непонятно что там копировать или писать таким образом мы гарантируем что


[02:14 - 02:32] какой внешний код не создаст свой собственный экземпляр данного класса теперь нам нужно предоставить возможность создать тот единственный возможный результат который в данном класс может быть для этого используется статический метод стать то определяем статический метод внутри класса singleton


[02:32 - 02:48] таким образом он имеет доступ к закрытым конструктором и для хранения этого единственно экземпляра внутри статического метода мы определяем статическую локальную переменную типа синглтоны это и будет тот единственный экземпляр который у данного класса возможно


[02:48 - 03:06] для того чтобы предоставить внешний код возможность работы с этим мы будем возвращать его по ссылке из метода надо отметить что возвращение по ссылке в данном случае это единственно возможный вариант не может вернуть его по значениям потому что в этот момент


[03:06 - 03:25] пролет копирования а конструктор копирования у нас объявлена не определен и он еще и потому что закрыт таким образом мы обеспечили что у данного класса будет не более 1 объекта для того чтобы создать объект данного класса нужно вызвать метод инстанса


[03:25 - 03:43] в момент 1 вызова метода instance будет вызван конструктор у переменной типа синглтон внутри этого метода итак эта переменная статическая локальная то она будет существовать все время до конца работы программы


[03:43 - 03:59] таким образом если нам потребуется экземпляр данного класса то он будет создан при 1 вызове метода instance и дальше можно будет вызывать метод это просто через него получать доступ к этому единственному экземпляру надо отметить что бывают и более сложной реализации


[03:59 - 04:15] шаблон примерно синглтоны например если нам необходимо чтобы данный код работал в том числе и в многопоточном приложении то там использовать различные хитрости но идея более меня вообще то есть мы для того чтобы гарантировать


[04:15 - 04:34] гениальность данного экземпляра мы закрываем конструкторы конструктор копирует оператор присваивания делаем закрытыми только объединенными на неопределенными и тот единственный экземпляр который утонул класс возможно мы создаем


[04:34 - 04:45] статическом методе вот в данном случае статического локальной переменной таким образом обеспечивается единственность и гарантируется что никто не сможет его скопировать