Правильно ли я понимаю, что такое класс?

У меня возникли проблемы с поиском четкого и четкого определения класса. Обычно они дают общие идеи, не указывая конкретно, и мне интересно, правильно ли я это понимаю. Как я понимаю, класс - это набор кода, который управляет объектом. Например, в приложении, в котором есть кнопка "Да" и кнопка "Нет", и текстовое поле для вывода, код, который сообщает компьютеру, что делать, когда пользователь использует кнопку "Да", является одним классом, код для удара Нет - это еще один класс, а объект - это две кнопки и то, что они делают вместе, чтобы влиять на окно вывода. Я прав, или я смущаю здесь термины?

Спасибо

Ответы

Ответ 1

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

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

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

Какой подкласс? Ну, если вы думаете о "автомобиле" как о классе, то очевидно, что между "автомобилем" и "Larry 1996 beater Volvo универсалом" существует несколько промежуточных "видов" вещей. Это могут быть "универсал" и "универсал Volvo". Таким образом, моя машина будет примером "универсала Volvo", который сам будет подклассом "универсала", который будет подклассом "машины". Из части "автомобиль" мы хорошо знаем о моем объекте, из части "универсал" мы узнаем немного больше, а с "фургонов Volvo" еще немного по-прежнему.

Способ размещения классов и подклассов - это решение, принятое программистом. В моем примере выше, другой программист, возможно, сделал классы "автомобиль" , "вольвос", "пред-форд" и "вагоны". Это зависит от проблемы, которую вы пытаетесь решить.

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

Класс в основном способ организовать ваш код.

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

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

Ответ 5

В самом основании есть процедурный код:

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, которая "связана" с ней в том же классе. Он может работать с этой переменной, не беспокоясь о том, что это может быть неправильный вид данных. Также нет способа, чтобы data мог случайно оказаться в функции bar, которая является частью другого класса.

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

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

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

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

Ответ 6

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

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

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

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

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

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

MyClass myClass = new MyClass();

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

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

Надеюсь, вы получите эту идею.

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

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

Ответ 9

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

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

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

Итак, чтобы дать конкретный пример, вот класс, определяющий шар, написанный на 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

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