Что главнее методы или способы

Свойства против методов

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

Бэкграунд Java-программистов

Язык программирования — это основной инструмент программиста. Наличие или отсутствие каких-либо конструкций формирует определённый стиль кодирования. Вот, например, в Java нет свойств, есть только поля и методы.

Возьмём для примера следующий класс:

Мы имеем класс, описывающий точку на плоскости. Что с ним не так? Во-первых, так как это открытые поля, то они доступны для редактирования извне. Во-вторых, мы открываем детали реализации, что храним точку в декартовых координатах.

Поэтому, обычно, так не пишут, а инкапсулируют поля за геттерами и сеттерами:

Стандартная практика на Java, в IDE даже есть специальные генераторы для этого.
Мы убрали прямой доступ к полям с помощью методов get и set.

Хотя они выглядят как функции, в сущности, являются геттерами и сеттерами.

Сахар в Котлине

В Котлине у нас есть свойства и мы можем не писать простыню из методов get и set:

Выглядит лаконично, не так ли? Обращение к свойству тоже удобно: x вместо getX() .

При необходимости мы можем переопределить геттер или сеттер:

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

Нам подвезли сахар, но старые привычки остались. Я часто замечаю, что программисты на Java продолжают писать методы get и set в классах на Котлине, когда это уже необязательно. Название самих методов говорит о том, что их можно сконвертировать в свойства. Но всегда ли нужно предпочесть свойство методу? Если у нас есть функция без параметров, то выбор не всегда очевиден.

Общепринятые соглашения

Официальная документация говорит нам, что функции без параметров могут быть взаимозаменяемы read-only свойствами.

Ниже дан алгоритм, по которому можно определить, когда предпочесть свойство методу:

  • если свойство не бросает исключение (exception)
  • дёшево для вычисления (или можно закешировать при первом запуске)
  • возвращает одно и то же значение при каждом вызове, если состояние объекта не изменилось

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

Например, если у нас есть класс User:

Нужно ли полное имя делать свойством или всё же методом?

В данном случае создаётся всегда новый объект String, хотя это деталь реализации. Но значения всегда будут равны при сравнении через equals. На крайний случай можно закешировать fullName, пожертвовав памятью.

Но вот пункт про вычислимость вызывает больше всего вопросов.

Сложно или легко вычислимые свойства

Кажется, это довольно расплывчатое требование. Что значит сложно вычислимое? Если подразумеваются тяжёлые вычисления, такие как запрос в сеть или к БД, то мы должны будем вынести вызов в отдельный поток. В этом случае асинхронный вызов будет выглядеть по-другому: метод с коллбэком, реактивный поток или корутина. Но речь, скорее всего, не об этом.

Рассмотрим следующий пример:

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

Читайте также:  Способы утилизации литий ионных аккумуляторов

Допустим, чтобы получить текущую страницу, нужно пробежаться по всему документу, то есть сделать некоторые вычисления. В этом случае оптимально сохранить текущую страницу в переменную, прежде чем использовать её в цикле:

Но чтобы это понять, нужно заглянуть в реализацию. Когда программист видит свойство, то он делает некоторые допущения в использовании, полагая, что автор класса позаботился о принятом соглашении. В этом случае автор допустил небрежность, чем ввёл в заблуждение. По хорошему, нужно сделать метод вместо свойства для получения активной страницы и назвать её как-то по-другому, например, findActivePageIndex.

Интерфейс важнее реализации

С одной стороны, приведённый выше пример показывает, насколько важно думать об интерфейсе, как он будет использоваться на клиентской стороне. С другой стороны, реализация накладывает ограничение на интерфейс. Если сложные вычисления, то нужно использовать функцию вместо свойства. Здесь мы вступаем в некоторое противоречие, что первичнее, реализация или интерфейс? Мы заранее не можем сказать об эффективности и есть соблазн впасть в крайность — всегда делать методы в интерфейсе. Особенно после Java непривычно видеть свойства в интерфейсе. При этом, метод, начинающийся со слова get или set никого не смущает.

При проектировании интерфейса, по-моему, мы должны в первую очередь думать о клиентском коде. Если мы будем ставить реализацию впереди интерфейса, то мы получим плохой API класса. Цена такой ошибки может быть рефакторинг всех вызовов в проекте. Разработчики библиотек хорошо это понимают, когда изменение API ломает сторонний код или меняет поведение класса, на которое клиент не рассчитывал.

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

Интерфейс — это так же важно, как и подбор подходящего имени для переменной или функции. Это контракт между автором и пользователем интерфейса. Реализаций может быть множество, включая самые неоптимальные. Это уже детали. При реализации свойств мы должны позаботиться, чтобы оно соответствовало принятому соглашению о лёгкой вычислимости.

Фундаментальные отличия

Хорошо, предположим, мы принимаем, что интерфейс первичен по отношению к реализации. Но из каких соображений исходить при его проектировании. В каком случае выбрать свойство, а когда нужен метод?

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

  • Состояние. Можно рассматривать как данные, которые описывают характеристики или черты объекта. В этом случае больше подходят свойства.
  • Поведение. То есть то, что можно сделать с объектом. За это отвечают методы.
    Они обычно изменяют состояние.

Это довольно простое правило, которое поможет при выборе свойства или метода.

Методы принято начинать с глагола и если вы не можете подобрать ничего лучше, чем get/set, то это явный признак свойства.

Вместо заключения

Разберём первоначальный пример, только сделаем его интерфейсом:

Так что с ним не так?

Во-первых, два отдельных сеттера для координат x и y. Когда мы определяем точку в пространстве, то мы задаём их в паре, то есть атомарно. Меняя их независимо, мы создаём возможность для ошибок.

Добавим метод для задания координат и сделаем координаты x и y только для чтения:

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

Как мы видим, хороший интерфейс спроектировать не так просто. Хотя можно было бы ограничиться data-классом:

Источник

Соотношение понятий «средство» и «метод»

Семантика. Лексикология. Русский язык для нас

Соотношение понятий «средство» и «метод» ⇐ Семантика. Лексикология

Модератор: Роксана

Сообщение ACK » 04 апр 2011, 12:15

Здравствуйте. Я прошу прощения, за этот, вероятно простой, для многих, вопрос, но я запутался в соотношении этих понятий. Прошу объяснить мне, какое из них по своему значению, содержанию шире, во взаимосвязи друг с другом?

Читайте также:  Способ чтобы не пахло изо рта

Метод — (от греч. methodos — путь исследования — теория, учение), способ достижения какой-либо цели, решения конкретной задачи; совокупность приемов или операций практического или теоретического освоения (познания)действительности.
Метод — Способ действовать, поступать каким-н, образом, прием N3 (Ожегов);
Метод — совокупность приемов и операций познания и практического преобразования действительности; способ достиже­ния определенных результатов в познании и практике (Энциклопедический словарь);

Средство — Прием, способ действия для достижения чего-нибудь (Ожегов);
Средство — Прием, способ действия для осуществления, достижения чего-л. (Ефремова);

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

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

Но, к примеру: «. Ф.Бэкон, определяет метод (индуктивный метод) в качестве необходимого средства познания. С этого времени в науке окончательно (после трудов Аристотеля) закрепляется представление о методе как о некоем органоне — универсальном орудии, инструменте познания. Об орудийности метода в познании писали также Гегель и А. И. Герцен. В частности, Гегель подчеркивал, что «метод поставлен как орудие, как некоторое стоящее на субъективной стороне средство, через которое он соотносится с объектом». Будучи орудием и средством познающей деятельности, метод, по Гегелю, остается прежде всего знанием. «.
Т.е. здесь метод уже, сам является средством и таким образом, понятие средство, оказывается шире.

В общем, я запутался. Приношу извинения, за громозкость вопроса и возможно неудачную формулировку, я не специалист, педагог и т.п., но уяснить просто для себя, очень хочется.

Источник

Методический материал на тему «Метод,прием,способ».

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

Вопрос о том, как надо поступать для достижения определен­ ного результата в овладении деятельностью, составляет основной предмет любой методики (греч. methodos — путь, способ). Мето­ дика, определяющая законы, принципы, цели, содержание, мето­ ды, приемы, средства обучения речевой деятельности на любом иностранном языке, называется общей методикой обуче­ ния иностранным языкам. Методика, определяющая от­ бор языкового материала изучаемого языка, установление типоло­ гии трудностей овладения им, организацию его в учебном процес­ се, выбор методов, приемов, способов и средств обучения конкрет­ ному языку, называется частной методикой. Общая и част­ ные методики взаимосвязаны: частная методика обогащает общую методику опытом обучения конкретному иностранному языку, об­ щая — систематизирует, организует эти данные, выводит законо­ мерности и формулирует принципы.

Базисные категории методики

Методика обучения иностранным языкам имеет в своей основе

такие базисные категории, как система, метод, прием, способ

Наиболее существенные данные об этих категориях излагаются в трудах таких советских ученых, как И. В. Рахманов, Г. В. Рогова, М. В. Ляховицкий, И. Л. Бим.

Система обучения — полный набор компонентов, соот­ветствующий определенной методической концепции; она опредвг ляет цели, содержание, принципы, методы, приемы, способы, средА ства, формы организации обучения и в свою очередь обусловли­вается ими.

Система обучения иностранному языку, как и любому пред­мету, базируется на положениях диалектического материализма о всеобщей связи и взаимообусловленности явлений действитель­ности, о целостности беспрерывно развивающегося мира и сис­темном отражении наших знаний о нем. В любую систему входит понятие множества элементов и понятие целостности. Целостность системы обеспечивается многообразными связями между ее эле­ментами и их взаимодействием при функционировании системы. Применительно к обучению иностранным языкам целесообразно рассматривать понятие системы на двух уровнях: на уровне наи­более существенных явлений и процессов, определяющих исходные положения методики обучения иностранным языкам; на уровне педагогического процесса, то есть деятельности учителя и учащих­ся, опосредуемой учебным комплексом, что обусловливает конеч­ный результат — определенную степень обученности.

Читайте также:  Способы ориентирования определение азимут

Метод обучения — это способ деятельности, в наиболь­шей степени отвечающий поставленной цели. Термин метод, используется в методике обучения иностранным языкам в двух значе­ниях: в узком смысле — как один из способов обучения, и в ши­роком смысле как направление обучения, как методическая си­стема. Методы учения в значительной мере соотносимы с методами познания, хотя они не могут отождествляться с ними. К основным методам научного познания относят наблюдение, размышление и эксперимент. Еще великий французский философ-материалист Дени Дидро писал, что наблюдение собирает факты, размышление их комбинирует, опыт проверяет результат комбинаций.

При обучении иностранным языкам выделяют основные и со­путствующие методы в деятельности учителя и учащихся. В де­ятельности учителя основными методами являются: 1) показ; 2) объяснение (выделение ориентиров или организация их поиска самим учащимся); 3) организация тренировки; 4) организация применения вводимого материала. Каждому из этих основных ме­тодов сопутствует контроль, включающий коррекцию и оценку. В деятельности учащихся к основным методам познания относят­ся: 1) ознакомление, включающее чувственное восприятие, осмыс­ливание, проговаривание, наблюдение; 2) размышление, включа­ющее осознание выделенных ориентиров или их самостоятельный поиск; оно может принимать форму развернутого рассуждения, соотноситься с измерением, гипотезой; 3) тренировка, соотнося­щаяся с экспериментом, вернее, практикой в искусственных усло­виях; 4) применение разных видов речевой деятельности, соотно­сящееся с практикой в естественных условиях. Каждому из этих основных методов учения сопутствует самоконтроль, включающий самокоррекцию и самооценку.

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

В практике обучения выделяются группы приемов , направлен­ ные на решение более сложных и общих учебных задач. Такие группы приемов Г. В. Рогова называет способами . Так, напри­ мер, существуют два способа раскрытия значений слов и струк­тур — переводный и беспереводный. Каждый из них реализуется с помощью разных приемов. При способе беспереводной семанти- зации можно использовать картинку, предмет, контекст, антоним, синоним, гнездо слов.

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

Методы, приемы, способы и средства обучения иностранным языкам используются избирательно в соответствии с методической концепцией, лежащей в основе обучения и традиционно именуемой словом метод (грамматико-переводный, прямой, аудиовизуальный, сознательно-практический). В обучении иностранному языку по любому методу и в любом типе учебного заведения ведущая роль, однако, принадлежит обучающему.

Источник

Оцените статью
Разные способы