Обучение:Отношения полей, классов и пакетов

StackOverflow https://stackoverflow.com/questions/144700

  •  02-07-2019
  •  | 
  •  

Вопрос

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


Как вы суммируете «Поля», «Классы», «Пакеты» и «Их отношения»?

Это было полезно?

Решение

Я столкнулся с подобной проблемой, когда преподавал C, C++ и Java.Вот что я делаю:

Во-первых, я храню пакеты отдельно и в конце объясняю их.

В идеале, на мой взгляд, студенты должны сначала изучить ADT, желательно на языке C.У них есть структура, есть отдельные операции над ней.В этом случае поля представляют собой просто «слоты» в структуре, и вы даже можете показать расположение памяти, чтобы продемонстрировать это.Функции — это отдельные сущности, которые работают с этими структурами.

Затем вы переходите к классам, методам и полям и показываете, что по сути (за исключением наследования и некоторых анекдотов) они во многом являются синтаксическим сахаром для ADT.

Если вам нужно, вы можете затем преподавать макеты объектов, наследование и виртуальные таблицы (по моему опыту, это помогает студентам лучше понять наследование, увидев расположение памяти).

Наконец-то вы дошли до темы, как организовать совместные занятия.Если вы преподаете C++, у вас на самом деле нет пакетов, но вы можете объяснить пространства имен, обсудить организацию и отдельную компиляцию.

Если вы на Java, то вы просто объясняете, что это коллекции классов в одном пространстве имен, у которых есть особые правила доступа, и показываете их.Система пакетов в Java в любом случае несовершенна, поэтому я обычно использую шаблоны (например, отделение пакета пользовательского интерфейса от C).

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

Другие советы

Я описываю это так:

  • Объекты — это коллекции слотов, слоты, содержащие данные, — это поля, код слотов, содержащий код, — это методы.Публичные слоты находятся снаружи объекта, частные — внутри.Методы должны быть в основном общедоступными, поскольку объект предлагает услуги клиентам, поля должны быть закрытыми, чтобы клиенты не знали, как работают службы.Таким образом, поля являются деталями реализации объектов.
  • Имена классов должны быть уникальными, чтобы вы могли комбинировать свой код со сторонними библиотеками.Простых/коротких имен классов недостаточно, поскольку, вероятно, существуют тысячи классов с именами «Список», «Клиент» и т. д.Следовательно, классы помещаются в пакеты, чтобы создать более длинные и трудные для дублирования имена.Клиентам должно быть доступно только подмножество классов в пакете, поэтому существует два уровня доступа: общедоступный и по умолчанию.Это позволяет пакету функционировать как библиотека.

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

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

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

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

Пакеты используются для группировки классов и разрешения потенциальных конфликтов имен.Учитывая наличие нескольких разработчиков и общедоступных библиотек кода, весьма вероятно, что некоторые из нас будут называть наши классы одинаковыми (Math, LinkedList, FileUtils и т. д.).Наличие уникального имени пакета перед именем класса позволяет компилятору (и другим разработчикам) определить, какой класс вы собираетесь использовать.

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

Вот что я использую.

Объекты — это вещи.У них есть атрибуты (измерения, состояния бытия и т. д.). Атрибуты можно назвать полями.[Я часто использую вещи, которые нахожу в классе — чашки, фломастеры, шапки, пальто и т. д., чтобы проиллюстрировать это.]

Объекты также участвуют в поведении, называемом методами, функциями методов или операциями.

Характеристики объекта (атрибуты и операции, поля и методы и т. д.) позволяют классифицировать объекты.

Характеристики, общие для класса объектов, — ну — могут быть собраны в определении класса.Определение класса описывает атрибуты и методы объектов, которые являются членами класса.

Пакет — это набор определений классов.Хотя в идеале классы в пакете имеют что-то общее, это не является обязательным требованием и не является полезным различием.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top