Преподавание: полевые, классовые и пакетные отношения - PullRequest
2 голосов
/ 28 сентября 2008

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


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

Ответы [ 5 ]

2 голосов
/ 28 сентября 2008

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

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

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

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

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

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

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

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

1 голос
/ 28 сентября 2008

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

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

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

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

Функции (атрибуты и операции, поля и методы, что угодно) объекта обеспечивают способ классификации объектов.

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

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

1 голос
/ 28 сентября 2008

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

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

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

1 голос
/ 28 сентября 2008

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

1 голос
/ 28 сентября 2008

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

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

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

...