Я правильно понимаю, каков класс?

Я испытал затруднения при нахождении четкого, краткого laymans определения класса. Обычно, они дают общие представления без специфического обстоятельного объяснения его, и я задаюсь вопросом, понимаю ли я это правильно. Насколько я понимаю класс является набором кода, который управляет объектом. Например, в приложении, которое имеет кнопку для 'Да' и кнопку для 'Нет' и текстовое поле для вывода, код, который говорит компьютер, что сделать, когда пользователь использует кнопку Yes, является одним классом, код для удара No является другим классом, и объект является этими двумя кнопками и что они делают вместе для влияния на окно для вывода. Действительно ли я прав, или я путаю условия здесь?

Спасибо

14
задан Will Vousden 21 March 2010 в 01:04
поделиться

9 ответов

Класс - это вид вещи, объект - это актуальная вещь. Итак, в реальном мире «человек» - это класс, а мы с вами - объекты (или экземпляры) этого класса. «Автомобиль» - это класс, мой универсал Volvo 1996 года выпуска - это объект.

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

В приведенном вами примере вполне вероятно, что кнопки «да» и «нет» являются объектами класса «кнопка» (или каким-то похожим именем) и что различия в их поведении вызваны изменениями, добавленными программистом без его или она беспокоится о создании нового класса. Однако возможно, что программист принял решение сделать каждый тип кнопки подклассом исходного класса «button».

Что такое подкласс? Что ж, если вы подумаете о «автомобиле» как о классе, очевидно, что существует несколько промежуточных «видов» между «автомобилем» и «универсалом Volvo 1996 года, который был лучше всех». Это могут быть «универсал» и «универсал Volvo». Таким образом, моя машина будет экземпляром «универсал Volvo», который сам будет подклассом «универсал», который будет подклассом «автомобиль».В части "автомобиль" мы много знаем о моем объекте, в части "универсал" мы узнаем немного больше, а в части "универсал Volvo" еще немного.

Способ организации классов и подклассов - это решение, принимаемое программистом. В моем примере выше другой программист мог бы создать классы «автомобиль», «Volvo», «до Ford» и «Wagons». Это зависит от проблемы, которую вы пытаетесь решить.

16
ответ дан 1 December 2019 в 12:38
поделиться

Класс - это, по сути, способ организации вашего кода.

Это позволяет вам поместить весь код, связанный с одной абстракцией (подумайте о «концепции» или «идее») в одном месте.

В качестве примера - в вашем примере приложения окно с двумя кнопками, текстовое поле и некоторый код для обработки того, что происходит, когда пользователь вводит информацию, могут быть организованы в один класс: что-то вроде " PromptWindow ". Этот класс будет состоять из нескольких внутренних классов (две кнопки, текстовое поле и т. Д.). Это, вероятно, будет использоваться каким-то отдельным классом, который создаст экземпляр класса PromptWindow, вызовет метод для класс, чтобы показать окно, а затем использовать результаты.

1
ответ дан 1 December 2019 в 12:38
поделиться

Это будет очень упрощенное объяснение. Класс - это набор функций и переменных, который используется для создания объектов. Я думаю, что лучше использовать реальные примеры вместо собаки / лая / разговора и т. Д.

  • Адрес электронной почты класса
    • Тема (строка)
    • Сообщение (строка)
    • ToAddress (строка)
    • FromAddress (строка)
    • Отправить (функция)

Когда вы вызываете 'new Email ()', он создает новый объект с этими переменными и функциями. Затем вы можете заполнить переменные и отправить их.

2
ответ дан 1 December 2019 в 12:38
поделиться

В основе лежит процедурный код:

var a = 4
var b = 5;
print a + b;
… and so on, statements following statements…

Чтобы сделать такие фрагменты кода повторно используемыми, вы создаете из них функцию:

function a_plus_b() {
    var a = 4
    var b = 5;
    print a + b;
}

Теперь вы можете использовать этот фрагмент кода так часто, как захотите, но вы только один раз пришлось написать.

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

function foo(data) {
    …do something…
    return data;
}

function bar(data) {
    …do something else…
    return data;
}

a = "some data";
b = 123456;

a = foo(a);
b = bar(b);
c = bar(a); // ERROR, WRONG DATA FOR FUNCTION

Чтобы сгруппировать эти связанные части вместе, существуют классы.

class A {
    var data = 'some data';
    function foo() {
        …do something…
        return data;
    }
}

Функция foo теперь имеет переменную data , которая «связана» с ней в том же классе. Он может работать с этой переменной, не беспокоясь о том, что это могут быть неправильные данные. Также нет возможности, чтобы данные случайно попали в функцию bar , которая является частью другого класса.

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

instance1 = new A();
instance2 = new A();

instance1 и instance2 оба ведут себя точно так же, как класс A , они оба знают, как выполнять функцию foo (теперь называемую методом экземпляра ), и оба они хранят переменную data (теперь называемую переменной экземпляра или атрибут ), но эта переменная data может содержать разные данные для обоих экземпляров.

Это основы классов и объектов.Другое дело, как реализовано ваше конкретное диалоговое окно «ОК», «Отмена». Обе кнопки могут быть связаны с разными методами разных классов, или просто с разными методами одного класса, или даже с одним и тем же методом одного и того же класса. Классы - это просто способ логически сгруппировать код и данные, как это будет использоваться, зависит от вас.

1
ответ дан 1 December 2019 в 12:38
поделиться

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

Чтобы использовать ваш пример, может быть класс Button , который определяет, что такое кнопка в вашем приложении. Затем этот класс будет создан дважды, чтобы предоставить два объекта: один для кнопки «Нет», а другой - для кнопки «Да». Класс Button может иметь поле / свойство Text , которое определяет, какой текст он содержит - для этого можно установить значение «Нет» и «Да» в соответствующей Button ] экземпляров, чтобы придать им различный вид.

Что касается поведения кнопок при нажатии, это обычно реализуется с помощью шаблона наблюдателя , в котором предметный класс (в данном случае Button ) поддерживает список отдельных объекты-наблюдатели, о которых он уведомляет всякий раз, когда происходит какое-либо событие (например, при нажатии кнопки).

0
ответ дан 1 December 2019 в 12:38
поделиться

Из определения Class в Википедии:

В объектно-ориентированном программировании класс является конструкция, которая используется как план (или шаблон) для создания объектов этого класса. Этот план описывает состояние и поведение, которые разделяют все объекты класса.Объект данного класса называется экземпляром класса. Класс, который содержит (и был использован для создания) этот экземпляр , может рассматриваться как тип этого объекта, например экземпляр объекта класса "Fruit" будет типа "Fruit".

Класс обычно представляет собой существительное, такое как человек, место или (возможно довольно абстрактная) вещь - это модель концепции внутри компьютера { Программа {1}}. По сути, он инкапсулирует состояние и поведение концепции, которую он представляет. Он инкапсулирует состояние через заполнители данных , называемые атрибутами (или переменными-членами или переменными экземпляра ); он инкапсулирует поведение через многократно используемые разделы кода , называемые методами.

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

Кнопки Да и Нет плюс текстовое поле обычно указываются в классе, принимающем за пример кода, написанного на C # (Microsoft .NET Framework). Назовем этот класс MyClass.

Действия, вызываемые кнопками, обрабатываются так называемыми обработчиками (методами). Вы можете написать свой код таким образом, чтобы при нажатии кнопки «Да» что-то записывалось в текстовом поле.

Чтобы создать экземпляр MyClass, вы должны сделать следующее:

MyClass myClass = new MyClass();

myClass.ButtonYes += new EventHandler(YourMethodForYes);
myClass.ButtonNo += new EventHandler(YourMethodForNo);

myClass.TextBox.Text = "Yes button was clicked";

Надеюсь, вы уловили идею.

Я писал обычно выше, потому что описанный вами cenario может быть реализован несколькими способами. ООП дает вам множество способов выполнить ту же задачу.

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

0
ответ дан 1 December 2019 в 12:38
поделиться

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

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

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

2
ответ дан 1 December 2019 в 12:38
поделиться

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

Класс человека будет иметь такие методы, как Talk (), Walk (), Eat (); и атрибуты, такие как Высота, Цвет, Язык и т. д.

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

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

0
ответ дан 1 December 2019 в 12:38
поделиться

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

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

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

Чтобы дать конкретный пример, вот класс, который определяет мяч, написанный на Python:

class Ball:
    color = ''
    def __init__(self, color):
        self.color = color
    def bounce(self):
        print "%s ball bounces" % self.color

blueBall = Ball("blue")
redBall = Ball("red")

blueBall.bounce()
redBall.bounce()

Выполнение этого дает ожидаемый результат:

blue ball bounces
red ball bounces

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

0
ответ дан 1 December 2019 в 12:38
поделиться