Зачем нужно наследование в ооп 2020 год

Зачем нужно наследование в ооп 2020 год

Наследование — создание нового класса на базе уже имеющегося, или базового класса. Принцип наследования состоит в том, что элементы данных и методы базового класса автоматически становятся элементами данных нового класса.

Существуют два типа наследования:

Простое наследование — когда каждый потомок имеет только один родительский или базовый класс.

Множественное наследование – когда несколько базовых классов используются для создания нового класса — потомка, наследующих свойства всех своих родительских классов.

Формат описания класса при наследовании

Class имя_класса_наследника:спецификатор_доступа имя_базового_класса

Спецификатор доступа (private | protected | public) при объявлении производного класса определяет, какие элементы базового класса наследуются производным классом.

Ограничение доступа для производных классов

Если производный класс наследует базовый с ключом:

  • private – все элементы унаследованные от базового класса скрываются для всех следующих потомков и рассматриваются как private текущего класса;
  • protected – разрешает последующим потомкам доступ к элементам protected, но закрывает для потомков public, превращая их в protected.
  • public – права доступа к элементам базового класса определяются самим базовым классом, как для текущего, так и для всех других потомков;

Конструкторы и деструкторы при наследовании

Замечание: Если используются конструкторы с параметрами, то наследование должно быть с ключом public, чтобы можно было создать объекты произвольных классов.

При создании конструктора производного класса:

  • сначала вызывается конструктор базового класса, а затем вызывается конструктор текущего класса
  • если базовый класс имеет несколько конструкторов, то необходимый указывается при определении конструктора производного класса;
  • если конструктор базового класса имеет параметры, то они включаются в список параметров производного класса.

Деструкторы производного класса:

  • не имеют параметров
  • сначала вызывается деструктор производного класса, а затем базового
  • деструкторы вызываются в порядке, обратном вызовам конструкторов.

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

Подведем итоги:

1. Механизм наследования позволяет реализовать принцип эффективного программирования: написанный код можно многократно использовать. Методы базового или родительского класса могут использоваться объектами всех классов потомков.

2. Наследование реализует принцип программирования от «простого к сложному» или от «общего к частному». При этом базовый класс реализует только самые общие и простые методы, описывающие поведение всех объектов, а каждый производный класс лишь добавляет специфические особенности.

Что нужно знать учителю о ФГОС простым языком
Изменения в ФГОС-2020

Что такое ФГОС в образовании?

Федеральные государственные образовательные стандарты (ФГОС) – это обязательные требования, которые должны исполнять все государственные образовательные учреждения.

Если вы преподаёте в государственной школе, вузе, лицее, техникуме — вы обучаете детей по Стандартам.

Зачем нужен ФГОС?

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

ФГОС также обеспечивает преемственность образовательных программ. Каждый педагог может быть уверен, что ученик освоил необходимые знания на предыдущей ступени образования, поэтому ему не нужно объяснять темы, выходящие за рамки учебной программы конкретного класса.

Направления реализации ФГОС

  • ФГОС начального общего образования (1-4 кл.)
  • ФГОС основного общего образования (5-9 кл.)
  • ФГОС среднего общего образования (10-11 кл.)
  • ФГОС образования обучающихся с ограниченными возможностями здоровья (ОВЗ)

Каждый педагог учитывает в своей работе несколько видов ФГОС:
— Стандарт, в зависимости от класса преподавания
— Стандарт, регламентирующий работу с детьми с ОВЗ

Закон «Об образовании в РФ» обеспечивает право на образование для всех категорий детей, в том числе и для учеников с ограниченными возможностями здоровья. Поэтому всем педагогам необходимо овладеть компетенциями по работе с детьми с ОВЗ.

Стандарты и официальные документы для всех уровней образования есть на сайте fgos.ru

Требования ФГОС

Рассмотрим три главных требования ФГОС к образовательным программам начальной, средней и старшей школы:

Читать еще:  Налогообложение при наследовании недвижимости 2020 год

Требования к структуре основных образовательных программ

Требования к условиям реализации основных образовательных программ

Требования к результатам освоения основных образовательных программ

Эта часть Стандартов больше направлена на руководителей и методистов, так как именно они определяют структуру каждой ступени образования в школе. А учителю-предметнику важнее следующий раздел, который касается структуры программы в соответствии с ФГОС.

Структура основной образовательной программы в соответствие ФГОС

Каждый учитель разрабатывает для своего предмета образовательную программу. К её содержанию тоже есть свои требования. Это три раздела:

Основная образовательная программа должна соответствовать типу и виду образовательного учреждения, а также быть преемственной по отношению к программе предыдущего уровня образования.

Главное о ФГОС в образовании

  • Приоритетная задача Стандартов — развитие и воспитание личности обучающихся.
  • Задача педагогов — научить детей учиться, а не только осваивать материал. Необходимо обеспечить способность к самостоятельному усвоению новых знаний и умений.
  • Итоговая оценка в обучении — достижение личных, предметных и метапредметных результатов, необходимых для дальнейшего продолжения образования на следующих ступенях.
  • В процессе обучения желательно использование информационно-коммуникационных технологий в контексте всех предметов и обязательно использование системно-деятельного подхода.
  • В образовательный процесс включена урочная и внеурочная деятельность по направлениям развития личности. Основное образование должно формировать личностное самоопределение учащихся.
  • Каждое образовательное учреждение разрабатывает основную образовательную программу (ООП), которая включает в себя: учебный план, календарный учебный график, рабочие программы по учебным предметам, методические и оценочные материалы.

Обновления ФГОС

Стандарты первого поколения были приняты в 2004 году (назывались государственными образовательными стандартами).

Сейчас в России действуют ФГОС второго поколения, которые были приняты в 2009-2012 гг., ориентированы на развитие УУД (универсальных учебных действий).

Новые ФГОС 2019-2020

С 29 марта 2019 г. по 29 апреля 2019 г. проводилась общественная доработка нового варианта Стандарта на сайте preobra.ru.

«Действующие стандарты недостаточно конкретизированы. Есть, конечно, общие посылы, но содержание отсутствует. Получается, что у нас есть ЕГЭ с конкретными вопросами по результатам, которые не прописаны», — сообщила министр просвещения Российской Федерации Ольга Васильева.

В предыдущей редакции Стандарт включал только общие установки на формирование определенных компетенций. Учебные учреждения сами решали, что именно и в каком классе изучать, поэтому образовательные программы разных школ отличались, а результаты обучения были не конкретизированы. ФГОС нового поколения определяет чёткие требования к предметным результатам по каждой учебной дисциплине.

Вот некоторые из проектируемых изменений в ФГОС:

  • Чётко прописаны обязательства образовательного учреждения (в частности, школы) перед учениками и родителями.
  • Сделан акцент на развитие «мягких» навыков — метапредметных и личностных.
  • Подробно указан перечень предметных и межпредметных навыков, которыми должен обладать ученик в рамках каждого предмета (уметь доказать, интерпретировать, оперировать понятиями, решать задачи).
  • Расписан формат работы в рамках каждого предмета для развития этих навыков (проведение лабораторных работ, внеурочной деятельности и т.д).
  • Зафиксированы контрольные точки с конкретными результатами учеников (сочинение на 300 слов, словарный запас из 70 новых слов ежегодно и т.п).

Новые требования ФГОС 2019-2020 призваны сохранить фундаментальный характер образования, укрепить метапредметные навыки и предметные познания.

Курсы для учителей по ФГОС-2020

Фоксфорд подготовил линейку практико-ориентированных курсов, которые помогут учителям в реализации ФГОС. На каждом курсе мы выделим отдельное занятие, чтобы обсудить нововведения во ФГОС общего образования 2020.

Зачем нужно наследование в ооп 2020 год

Мы обсуждали тему вреда наследования в рамках недавней встречи клуба (уже доступно видео для желающих послушать про беды ООП, а также правильные подходы к дизайну и архитектуре). Я решил для закрепления темы и разжигания очередного холивара повторить основные тезисы в статье. 🙂

Итак, вроде бы наследование входит в состав трех китов, на которых держится весь ООП. Тем не менее, про прошествии лет люди осознали, что вреда от наследования обычно больше чем пользы и на самом деле наследование нужно в исключительных случаях. Что же не так с наследованием?

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

Читать еще:  Наследование страховых выплат 2020 год

В языках программирования такой эффект наблюдается за счет отсутствия необходимости переопределять публичные методы родительского класса. А это значит, что их с момента наследования могут добавить сколько угодно и вам никто, включая компилятор, об этом не скажет. А это, в свою очередь, может поломать вашу логику наследования с расширением возможностей родительского класса. На самом деле варианты есть – написать модульный тест, который посчитает количество публичных и полупубличных методов и проверит их количество. Это тоже не даст полной гарантии уведомления, но уже лучше. В идеале, стоило бы при наследовании во избежание сторонних эффектов добавлять тест, фиксирующий сигнатуры методов родительского класса. Но кто это делает? Я не встречал на практике. Более подробно с примерами о плохом наследовании можно прочитать в “Effective Java”. Надеюсь, эту книгу и так все Java разработчики прочли. 🙂

Это не все минусы наследования. Когда у класса появляется несколько наследников, то у них есть общее поведение, а есть расширенное. И зачастую приходится извращаться с тестами, чтобы избежать дубликатов. Это вырождается в абстрактный тест, который каждый тест на дочерний класс должен наследовать. А что делать, если вы наследуете класс из сторонней библиотеки. В этом случае нужно ли писать тесты на базовое поведение, дублируя существующие тесты в библиотеке? Или стоит оставить их как “надежные” без тестов?

Но ведь есть же шаблоны проектирования, которые предрасполагают нас к использованию абстрактных классов и наследования. Есть, и это большое зло. Мало кто правильно реализует тот же Template Method, делая публичные методы final и давая ровно столько точек для расширения дочерним классам, сколько требует базовый алгоритм. Но и правильная реализация не защитит от добавления новых точек для расширения при модификации алгоритма или рефакторинге. И ни один из наследников не получит уведомления от компилятора об этом. В данном случае гораздо лучше работает шаблон Strategy, где шаги алгоритма расписаны в интерфейсе, и обычный класс с реализацией самого алгоритма. Таким образом, каждая реализация интерфейса стратегии будет давать конкретную реализацию шагов алгоритма.

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

Практически любое использование наследования можно заменить на композицию. Для этого нужен только интерфейс. Тестировать становится значительно проще, гибкости становится больше, уведомления об изменениях будет давать компилятор, код становится менее связанным… Одни преимущества! Почему же так не делают на практике? Ответ простой – из-за лени. Гораздо проще добавить еще одного наследника и дописать строчку кода, перекрыв один из методов. Это требует меньших усилий. А на то, что есть какие-то сложности в будущем, плевать. В будущем поддерживать этот код будет кто-то другой. 🙂

Может быть у вас есть возражения или удачные применения наследования? Напишите о них в комментариях!

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Читать еще:  Сцепленный с полом тип наследования 2020 год

Наследование в ООП — стоит ли широко применять?

Я не гуру, но в реальный проектах рулят «Рефакторинг» М.Фаулера, «Совершенный код» Макконнела, «Приемы объектно-ориентированного проектирования» Э. Гамма.

Наследование, не наследование — определяется задачей и сложностью кода. Что-то красиво и изящно делается наследованием, где-то оно наоборот всё усложняет.

Наследование действительно следует избегать. Вообще, идеально избегать так, будто наследования нет вовсе, будто это чит-код при использовании которого пролетариат убивает котёнка.

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

Как по мне, не стоит ударяться в крайности. Добавляйте столько уровней иерархии, сколько будете использовать. Пример избыточного наследования: liquid->alcohol->beer. Если в вашем приложении есть только пиво разных марок, то от классов liquid и alcohol вы можете отказаться, но если вы в дальнейшем заведомо будете добавлять, например класс vodka, у которого будет общий функционал с beer, то класс alcohol можете оставить, то же самое касается и класса liquid, если в приложении будет например water или juice. Неоспоримое преимущество наследования — полиморфизм, чтобы когда вы дали своему человечку в приложении разные напитки, неважно сок это или пиво, он смог использовать их по применению. Всегда задавайте себе вопрос: «А зачем?» при проектировании своего приложения и избежите излишних абстракций и функционала.

P.S. Пример упрощен до безобразия, чтобы можно было акцентировать внимание на нужных моментах.

Есть области, где без наследования не обойтись, например, в разработке GUI, когда у классов есть очень много общего — события от мыши, размеры, координаты и т.д. В программировании игр, тоже самое, у игровых персонажей есть куча общего, поэтому такие вещи лучше делать через наследование.

Но это нужно уметь совмещать с композицией, т.е. не пихать в родительский класс всё подряд, а выносить в отдельные классы. Тем самым код родительского класса будет проще и наследование будет проще пониматься. Например, если у монстров есть поведение — AI, то нет нужды пихать методы AI в класс монстра, лучше создать для этого отдельный класс AI и сделать его отдельным полем в классе монстра.

А еще лучше AI сделать как внешний сервис, который ожидает на входе игровые объекты. Тем самым класс монстра даже и знать не будет о существовании AI, и тем самым код будет проще в понимании.

Привет. Реальных проектов указать не могу, но наследование нужно применять, когда нужно расширение класса, как вида. Например: от класса Животное наследуются классы Собака, кошка и т.д. Также следует помнить о интерфейсах (java/c#) или множественном наследовании (c++,etc), которые расширяют возможности класса.

Неплохо бы уточнить конкретную ситуацию для примера или язык программирования. Однако.

Скажу про Java, а в комментариях подскажите для всех ли языков такое используется:
Надо понимать, что во время создания объекта (оператор new, допустим — new ChildClass() ) сначала вызывается конструктор класса ChildClass. Если ChildClass является наследником другого класса, например ParentClass, то конструктор ParentClass также вызывается при создании объекта наследника (ChildClass). Вероятно, по этой причине не советуют делать длинные линейки наследования.

По поводу общего объекта — любой класс является наследником какого-либо общего корневого класса (например, object).

UPD: да, кажется, для всех ЯП такой же принцип работы конструкторов:)

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector