Как разделить программу на классы

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

Разделяемые классы

В языке C# можно разделить определение класса между двумя или более исходными файлами. Каждый файл с исходным кодом содержит часть определения класса, а во время компиляции все части объединяются. Чтобы разделить определение класса, нужно использовать ключевое слово partial .

Пример 1. Выводим высоту и ширину

Практическое руководство. Разделение класса на разделяемые классы в конструкторе классов

Область применения:yesVisual StudionoVisual Studio для Mac noVisual Studio Code

Python с нуля. Урок 10 | Классы и объекты

Объявление класса или структуры можно распределить по нескольким объявлениям с помощью ключевого слова partial ( Partial в Visual Basic). Можно использовать неограниченное количество разделяемых объявлений.

Объявления могут находиться в одном или нескольких исходных файлах. Все объявления должны входить в одну сборку и одно пространство имен.

Разделяемые классы могут быть очень полезны. Например, при работе над большим проектом разделение класса на несколько файлов позволяет работать с ним сразу нескольким разработчикам. При работе с кодом, созданным Visual Studio, класс можно изменить без повторного создания исходного файла. (Примеры кода, создаваемого Visual Studio: Windows Forms и программы-оболочки веб-служб.) Это позволяет составить код с использованием автоматически генерируемых классов, не изменяя файл, созданный Visual Studio.

Частичные методы бывают двух типов. С C# и Visual Basic они называются объявлением и реализацией соответственно.

Конструктор классов поддерживает разделяемые классы и методы. Фигура типа в схеме классов относится к расположению отдельного объявления для разделяемого класса.

Если разделяемый класс определен сразу в нескольких файлах, можно указать, какое расположение объявления будет использовать конструктор классов, настроив свойство Расположение нового члена в окне Свойства. В результате при двойном щелчке фигуры класса конструктор классов переходит в исходный файл, который содержит объявление класса, заданное свойством Расположение нового члена.

Читайте также:
Программа spb что такое

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

Что такое класс. Что такое объект класса. Экземпляр класса это. Класс ООП это. Урок #73

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

Visual Basic использует определения разделяемых классов для отделения автоматически созданного Visual Studio кода от кода, созданного пользователем. Этот код разбивается на отдельные исходные файлы. Например, конструктор форм Windows Forms определяет разделяемые классы для элементов управления, таких как Form . Не следует изменять код, созданный в этих элементах управления.

Дополнительные сведения о разделяемых типах в Visual Basic см. в статье Partial.

Пример

Чтобы разделить определение класса, используйте ключевое слово partial ( Partial в Visual Basic), как показано в следующем примере:

// First part of class definition. public partial class Employee < public void CalculateWorkHours() < >> // Second part of class definition. public partial class Employee < public void CalculateTaxes() < >>
‘ First part of class definition. Partial Public Class Employee Public Sub CalculateWorkHours() End Sub End Class ‘ Second part of class definition. Partial Public Class Employee Public Sub CalculateTaxes() End Sub End Class

См. также раздел

  • Разделяемые классы и методы
  • разделяемый (тип) (Справочник по C#)
  • partial (метод) (справочник по C#)
  • Partial (Visual Basic)

Источник: learn.microsoft.com

Правильное разбиение на классы

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

Читайте также:
Как войти в программу фиас

Класс будет иметь все необходимые методы для получения информации по нему из базы(опять же, по одному прошедшему опрос). Вопрос в следующем: когда нужно будет выводить статистику, что правильней — вызывать на каждого пользователя по объекту опроса, записывать все в какой-либо буфер, а потом уже отдельно (при необходимости) обсчитывать весь полученный массив информации для подведения статистики? Или же все-таки нужно создавать отдельный класс под все опросы, и если да, то как должен быть связан класс «опросы» с классом «опрос»? Скорее всего прозвучало глупо, но мне не хватает терминологии чтобы сформулировать получше, за это извиняюсь) P.S.: если отошлете какие-то ссылки на литературу по этому поводу — только спасибо скажу)

Отслеживать
задан 14 янв 2014 в 7:07
23 5 5 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

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

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

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

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

Отслеживать
ответ дан 14 янв 2014 в 7:56
Alex Krass Alex Krass
17.5k 2 2 золотых знака 24 24 серебряных знака 52 52 бронзовых знака

Как я бы проектировал подобную систему.

Читайте также:
Ai suite 3 обзор программы

Создал следующие классы

модель_опроса . Этот класс содержит данные опроса и базовые функции.

загрузчик_опроса . Этот класс получает ссылку на модель_опроса и «условный номер» (имя файла, id в базе, кусок json/xml) и умеет сохранить/открыть опрос.

список_опросов . хранит массив опросов. Умеет сохранить/загрузить опросы, получив ссылку «загрузчик_опроса».

уже при такой модели, можно делать многое. К примеру, нужно вывести в виде html список. Для этого пишется «загрузчик_опроса» который умеет печатать один опрос.

Теперь ответ на вопрос — как считать статистику. Для этого в список вопросов нужно добавить метод «посчитать» (некоторые здесь скажут, что лучше сделать отдельный класс для этого, но это нужно ещё подумать). Метод посчитать получает один параметр — функцию. Внутри он делает простое — в цикле для каждого элемента ее вызывает, а результат складывает.

И собственно результат сложения возвращает. В таком случае очень легко делать статистику под что угодно — только функцию новую написать. А так как в php есть анонимные фукнции, то простенькие функции можно писать налету. Эта функция должна получать параметром «модель_опроса».

Учитывая статью, можно будет писать код вида

function positive($one_pull) < return $one_pull->yes > $one_pull->no; > $statistic = $pull_list.calc(‘positive’);
$positive = function($one_pull) < return $one_pull->yes > $one_pull->no; > $statistic = $pull_list.calc($positive); // method call function call($cc) < $c = 0; foreach ($one : $list) < $c += $cc($one); >return $c; >

Похожим образом можно определить функцию filter, которая будет получать предикат (функцию, которая получает один опрос и возвращает true|false) и возвращает новый список. Этот же предикат можно использовать для подсчета опросов, удовлетворяющих определенному условию — нужно функцию фильтр немного переписать.

Зачем все так сложно? очень просто. Те, кто будет писать функцию для фильтрации запроса абсолютно не интересно знать, как запрос сохраняется в json. Поэтому, ему будет легко протестировать на отдельных запросах. Если кто то решит написать сохранение в оракловую базу, ему не обязательно знать, как оно на печать выводиться. И он не будет бояться, что добавив одно поле в «модель_опроса», он сломает статистику.

(я давно на php не писал, могу делать банальные глупости, но я старался передать идею).

Источник: ru.stackoverflow.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru