Рубрики
Без рубрики

Принципы объектно-ориентированного программирования, объясненные Pokémon

Почему Покемон? Почему нет? Многие из моих друзей выросли с покемонами или у них нет детей, которые смотрят покемонов… Помечено как ооп, java, новичок, учебник.

Почему Покемон? Почему нет? Многие из моих сверстников выросли с покемонами или у них нет детей, которые смотрят покемонов. Кроме того, многие новички с трудом постигают основы объектно-ориентированного программирования. Я надеюсь, что смешение четырех основных принципов с тем, что видели так много людей, поможет ему сработать. Сделав тему менее абстрактной (что иронично) и более понятной, это могло бы помочь кому-то понять основы. Чего еще мы могли желать? Так что давайте начнем!

Примечание: Если вы не следуете Pok é пн, эта статья, вероятно, не будет иметь особого смысла.

Что такое Объектно-ориентированное программирование?

Во-первых, Объектно-ориентированное программирование (ООП) – это модель языка программирования, в которой объекты взаимодействуют друг с другом для решения проблемы. Объекты – это фрагменты кода, которые можно использовать повторно, чтобы вам не приходилось постоянно их переписывать. Объекты используются в классах, а классы – это просто чертежи для этих объектов. Используя эти чертежи (или классы), вы можете создавать экземпляры этих объектов, которые по сути являются просто версиями исходного объекта, построенного на основе чертежа.

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

Инкапсуляция

Инкапсуляция – это процесс объединения функций и данных в класс. Доступ к данным осуществляется не напрямую, а скорее через функции внутри класса. Смысл инкапсуляции состоит в том, чтобы ограничить доступ к компонентам вашего объекта, чтобы пользователи не изменяли ваши объекты напрямую.

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

Чтобы правильно использовать инкапсуляцию, вам нужно будет использовать модификаторы доступа. Разные языки используют разные варианты модификаторов доступа, но в Java они:

Общедоступный: Код из любой точки приложения может получить к нему доступ. Private: Доступ к нему может получить только код из того же класса. По умолчанию: Если вы не определяете модификатор доступа для своего класса, вы будете использовать модификатор доступа по умолчанию. Код внутри одного класса и пакета может получить доступ к коду. Защищено: Защищенный класс имеет тот же доступ, что и по умолчанию, с добавлением подклассов, имеющих возможность доступа к коду.

Наследование

Наследование в программировании – это когда один класс приобретает свойства от другого класса. В Java класс может быть получен только из одного другого класса. Мы называем исходный класс родительским классом (или суперклассом). Производный класс называется дочерним классом (или подклассом). Вот где Покемон в качестве сравнения действительно начинает сиять. Помните эволюцию? Помнишь, как Чармандер превратился в Чармелеона. На самом деле это отличный пример наследования.

Допустим, у вас есть Заклинатель (суперкласс), и он знает два основных хода. Царапать и жечь. Внезапно ваш Чармандер становится достаточно сильным, чтобы эволюционировать, и он превращается в Чармелеона (подкласс). Чармелеон изучает новый прием под названием Огнемет, но у него также все еще есть доступ к Царапинам и Ожогам, потому что он унаследовал эти способности от Чармандера (который был Суперклассом). Вау, в этом есть какой-то смысл, верно?

Это основная концепция наследования в объектно-ориентированном программировании. Если бы вы писали программу, вам бы не хотелось писать один и тот же код снова и снова, это неэффективно, и управлять им – сущий кошмар. Вместо этого вы расширили бы свой родительский класс новым дочерним классом, и все исходные свойства родительского класса будут расширены до дочернего класса. Те же результаты, более эффективные, но намного меньше работы.

Полиморфизм

Полиморфизм – это способность принимать множество форм. В программировании полиморфизм означает различную обработку объектов в зависимости от их типа данных. Другими словами, если у вас есть один метод, он может иметь несколько реализаций для определенного действия класса. В момент запуска приложения (время выполнения) оно решит, что делать.

В Pokémon два персонажа ярко демонстрируют эту способность, то же самое и Иви. Давайте возьмем Eevee в качестве примера. Если у вас есть родительский класс под названием Eevee с несколькими дочерними классами (Vaporeon, Leafeon, Jolteon и т. Д.), А затем поместите Eevee в контакт с камнем эволюции… Будет вызван соответствующий дочерний класс. Таким образом, если бы Eevee соприкоснулся с водяным камнем, дочерний класс Vaporeon был бы запущен во время выполнения, и код Vaporeon использовался бы в отличие от Leafeon, Jolteon и т. Д…

Итак, как вы используете полиморфизм? Что ж, в Java полиморфизм может быть как статическим, так и динамическим. Перегрузка метода является статической, а переопределение метода – динамическим. Перегрузка считается статической, поскольку вызываемый метод определяется во время компиляции. Вы используете перегрузку, когда методы, которые имеют одно и то же имя , ведут себя по-разному в зависимости от аргументов, переданных методу. Вот пример в коде:

public class Eevee {

    public void sound () {
        System.out.println("Eevee");
    }

    public void sound (int num) {
        for (int n : num) a
        {  
            System.out.println("Eevee");    
        }    
    }
}

Переопределение считается динамическим, поскольку оно разрешается во время выполнения. Переопределение означает, что производный класс реализует метод своего родительского класса. Если это звучит сбивающе с толку, подумайте о примере Eeveelution, о котором мы говорили. Вот он в кодовой форме:

class Eevee{
    public void sound(){
        System.out.println("Eevee");
    }
}
class Vaporeon extends Eevee{
    public void sound(){
        System.out.println("Vaporeon");
    }
}

public class OverridingTest{
    public static void main(String [] args){
        Eevee eevee = new Vaporeon();
        eevee.Vaporeon();
    }
}

В этом примере выходом будет “Vaporeon”.

Абстракция

Абстракция – это процесс отображения пользователям только релевантных данных и сокрытия ненужной информации. Отличный пример торговли покемонами с другом. Во время этого процесса, несомненно, многое происходит за кулисами. Передается много данных, файлы обновляются, и объекты определенно создаются. Однако для пользователей все, что вы видите, – это то, что ваш покебол проходит через машину и исчезает до того, как перед вами появится новый покебол. Это абстракция. Это оно. Это не должно становиться более сложным, чем это.

Заканчивай с этим

Само собой разумеется, что это было упрощенное объяснение объектно-ориентированного программирования, но я надеюсь, что эта статья может помочь кому-то, кто, возможно, пытался немного лучше понять концепции. Как и в большинстве других вещей, программирование – это навык, и для его освоения требуется много практики. Если эти концепции не имеют полного смысла, вам следует изучить их глубже, потому что они являются основными основами ООП. Наличие прочного фундамента – лучший способ развить свои навыки. Я оставлю вам всем обязательный GIF с Пикачу. Спасибо за чтение.

Оригинал: “https://dev.to/iamtravisw/the-principles-of-object-orientated-programming-as-explained-by-pokemon-4eo5”