Местоположение
Россия, Воронежская обл., Воронеж

Достижения

Все достижения (5)

Наибольший вклад в теги

Все теги (67)

Лучшие ответы пользователя

Все ответы (199)
  • Что такое основы ООП?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Из обучения на PHP, но все-же.
    1. ООП знаешь? Что это такое?
    Объектно-ориентированное программирование – это парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В языках с прототипированием (например, в JavaScript) вместо классов используются объекты-прототипы.
    2. Расскажи основные принципы ООП.
    1) Инкапсуляция. Это механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает их от внешнего вмешательства или неправильного использования.
    Когда методы и данные объединяются таким способом, создается объект. Т.е. переменные состояния объекта скрыты от внешнего мира. Изменение состояния объекта (его переменных) возможно ТОЛЬКО с помощью его собственных методов. Можно сказать, что инкапсуляция подразумевает под собой сокрытие данных, что позволяет эти данные защитить.
    2) Наследование. Это процесс, посредством которого, один объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него.
    3) Полиморфизм. Это свойство, которое позволяет одно и тоже имя использовать для решения нескольких технически разных задач. Проще говоря, концепцией полиморфизма является идея
    “один интерфейс, множество реализаций”. Это означает, что можно создать общий интерфейс для группы близких по смыслу действий.
    3. Напиши пример реализации полиморфизма.
    <?php
    Class One {
        function foo() {
            echo “Hello from class One!”;
        }
        function callMe() {
            $this->foo();
        }
    }
    Class Two extends One {
        function foo() {
            echo “Hello from class Two”;
        }
    }
    $Two = new two();
    $Two->callMe();
    ?>

    4. Что такое виртуальный метод?
    Виртуальный метод в объектно-ориентированном программировании – это метод класса, который может быть переопределён в классах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения. Виртуальные методы – один из важнейших приёмов реализации полиморфизма.
    5. А зачем такое нужно?
    Чтобы программисту необязательно было знать точный тип объекта для работы с ним через виртуальные методы, достаточно лишь знать, что объект принадлежит классу или наследнику класса, в котором метод объявлен.
    Виртуальные методы позволяют создавать общий код, который может работать как с объектами базового класса, так и с объектами любого его класса-наследника. При этом базовый класс определяет способ работы с объектами и любые его наследники могут предоставлять конкретную реализацию этого способа.
    6. Зачем нужна инкапсуляция?
    Никто не застрахован от ошибок, а человеку тем более свойственно ошибаться. Применяя инкапсуляцию, мы, как бы, возводим купол, который защищает данные, принадлежащие объекту, от возможных ошибок, которые могут возникнуть при прямом доступе к этим данным. Кроме того, применение этого принципа очень часто помогает локализовать возможные ошибки в коде программы, а это намного упрощает процесс поиска и исправления этих ошибок.
    7. Как называется способность объекта скрывать свои данные и реализацию от других объектов системы?
    Инкапсуляция.
    8. Какие механизмы в ОО языках обычно позволяют обеспечить инкапсуляцию объектов?
    Модификаторы доступа.
    9. Может ли быть конструктор виртуальным?
    Нет, конструкторы не могут быть виртуальными.
    10. Что такое класс?
    Класс – это модель ещё не существующей сущности (объекта). Класс фактически описывает устройство объекта, являясь своего рода чертежом.
    11. А объект?
    Объект – это совокупность данных и методов для их обработки. Данные и методы называются членами класса. Вообще, объектом является все то, что поддерживает инкапсуляцию.
    12. Чем отличается класс от объекта?
    Класс – это тип данных, а объект – экземпляр типа класс.
    13. Что такое область видимости переменной?
    Область видимости переменной – это место в программе, в котором доступно значение переменной. Каждая переменная имеет свою область видимости (есть локальные переменные и глобальные переменные)
    Public. Метод/переменная доступны из любого места в коде.
    Protected. Защищённые методы или переменные доступны только внутри класса, где они были объявлены и из его производных классов.
    Private. Закрытые методы или переменные доступны только внутри класса.
    14. Чем локальные переменные отличаются от глобальных?
    Локальные доступны только конкретной подпрограмме, глобальные – всей программе. Ограничение зоны видимости придумали как для возможности использовать одинаковые имена переменных (что разумно, когда в разных подпрограммах переменные выполняют похожую функцию), так и для защиты от ошибок, связанных с неправомерным использованием переменных.
    15. Чем отличается процедурный подход от объектно-ориентированного?
    Процедурный подход предоставляет возможность программисту определять каждый шаг в процессе решения задачи. Задачи разбиваются на шаги и решаются шаг за шагом. Кроме того данные лежат отдельно от функций, для каждой новой сущности приходится писать свой набор функций с немного другими именами.
    А ООП предполагает заключение внутри одного класса, как данных, так и методов их обработки. При этом создание новой сущности не вызывает необходимости переписывать все методы, а только нужные (это называется “наследование”).
    16. Какие еще есть парадигмы (модели, подходы) программирования кроме ООП?
    Из тех, что наиболее часто встречаются: функциональная, аспектно-ориентированная и процедурная.
    17. Что такое абстрактный класс?
    Абстрактный класс в объектно-ориентированном программировании – это базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм. Абстрактный класс может содержать абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объем и наименьшее содержание.
    18. Можно ли создать экземпляр абстрактного класса?
    Если язык программирования позволяет, то можно, например в Delphi. Но, поскольку, мы говорим о РНР, то создать экземпляр абстрактного класса нельзя.
    19. Какая разница между абстрактным классом и интерфейсом?
    Один из самых любимых вопросов!
    Абстрактный класс – это класс, который имеет хотя бы 1 абстрактный (не определенный) метод и обозначается как abstract. Интерфейс – такой же абстрактный класс, только в нем не может быть свойств и не определены тела у методов.
    Кроме того, что абстрактный класс наследуется (etxends), а интерфейс реализуется (implements). Вот и возникает разница между ними, что наследовать мы можем только 1 класс, а реализовать сколько угодно.
    20. Зачем нужен интерфейс, если есть абстрактный класс?
    Затем, что можно унаследоваться только от одного абстрактного класса, но реализовать множество интерфейсов. Плюс, в качестве приятного довеска, ВСЕ методы, описанные в интерфейсе, ДОЛЖНЫ быть реализованы в классе, а в абстрактном классе их нужно для этой цели специально отмечать.

    Источник
    Ответ написан
  • Как найти последовательность символов внутри строки игнорируя при поиске все символы кроме букв и цифр?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    let str = '10 Great and Easy English Books!!! You Must Read. A regular expre  ! = ssion, !! ?? - () is a sequ  ence of characters&&? that define a sea_rch pattern.';
    
    let find = ['0greatandeasyengl', 'expressionisasequence', 'ersthatdefineasearchpattern'];
    
    find.forEach(function(pattern)
    {
      let pat = '';
      for (let i = 0; i < pattern.length; i++) {
        pat += pattern[i] + '[^a-z\\d]*';
      }
      let reg = new RegExp(pat, 'i');
      console.log(str.match(reg));
    })
    Ответ написан
  • Как сделать так, чтобы число не выходило за рамки диапазона?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Как сделать так, чтобы 105 - 7 получилось 109, а не 98?

    Придумать свой авторский учебник по математике
    Ответ написан
  • Как такое сверстать?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Руками
    Ответ написан
  • Как разобраться во всем нагромождении фреймворков и библиотек для JS?

    VicTHOR
    @VicTHOR
    (╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
    Фреймворки сделаны для ускорения работы.
    Что-бы ими пользоваться, для начала надо уметь решать задачи на чистом JS.
    Без сомнения надо уметь работать с асинхронностью, понимать ее, понимать контекст (this) JS на ES5 и ES6 (в плане стрелочной функции отсылка), промисы и колбеки, замыкания в этом языке.
    jQuery - это даже не фреймворк по сути, это библиотека, и изучение не обсуждается, львиная доля кода в интернете написана на jQuery, ну и если на ES6 решили вопросы быстрой выборки и еще какие-то нюансы в чем нужда использования jQuery, то циклы так и остались, которые в jQuery реализованы внутри библиотеки.
    Что касается Angular/React/Vue - лучше всего будет хотя-бы на одном написать что-нибудь, а у остальных понять логику, и с этими знаниями можно пробовать устраиваться. На каком писать, можно выбрать, исходя из рынка на данный момент в данном городе.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (42)