Я слышал о том, как C является неъектно-ориентированным языком и как Java является объектно-ориентированным языком. Мне было интересно, в чем разница?
В чем разница между объектно-ориентированными языками и не-объектно-ориентированными языками?
Ответ 1
Ничего себе, много больших ООП-терминов бросают к этому парню. Будучи тем, кто начал программировать программирование и теперь в основном занимается ООП, это концептуально, как я думаю о различии (без всех больших терминов):
В C у вас есть вещи, называемые structs, которые могут содержать состояние. Они вроде бы кажутся объектами, например, у вас может быть структура под названием "Автомобиль" и создавать экземпляры "Автомобили", а также задавать ее марку, модель и цвет. Тем не менее, вы не можете сказать экземплярам Car car делать что-либо. Вместо этого, если вы хотите вымыть свой автомобиль, вам нужно передать экземпляр автомобиля какой-либо внешней функции, например:
WashMyCar(myCar);
Языки ООП используют другое понятие из структур, называемых классами, а объекты - это экземпляры этих классов. Забудьте об этих больших наследованиях и полиморфизме слов на данный момент (это более продвинутые темы, как только вы получите классы). Подумайте только о примере автомобиля. В Java, например, вы можете определить класс Car как таковой:
public class Car {
String make;
String model;
String color;
}
Затем вы делаете экземпляр автомобиля следующим образом:
Car myCar = new Car();
myCar.make = "Honda";
myCar.model = "Accord";
myCar.color = "Black";
Это реально похоже на структуру. Теперь, что отличает ООП, вы можете расширить определение класса для определения методов класса, которые похожи на функции в процедуре, за исключением того, что они всегда работают с объектом. Итак, добавьте способ стирки:
public class Car {
String make;
String model;
String color;
String condition;
void washMe() {
this.condition = "clean";
}
void goOffroad() {
this.condition = "dirty";
}
}
Теперь вы можете сделать это:
Car myCar = new Car();
myCar.make = "Honda";
myCar.model = "Accord";
myCar.color = "Black";
myCar.goOffroad();
System.out.println(myCar.condition); // dirty
myCar.washMe();
System.out.println(myCar.condition); // clean
Надеюсь, этот пример поможет. Разумеется, для ООП (и процедурного) гораздо труднее, чем этот простой пример. Но основное отличие заключается в том, что классы объектов "владеют" своими собственными методами.
Ответ 2
Процедурное программирование и ООП, оба различных программирования парадигмы, являются пресловутыми яблоками и апельсинами. PP опирается на "подпрограммы". ООП отправляет "сообщения" на "объекты", которые изменяют "состояние" объектов и отправляют сообщения другим объектам; кроме того, объекты поведения могут быть расширены, создавая новые типы объектов. Оба полагаются на назначение и побочные эффекты. Проблемы могут иметь естественные решения в одной парадигме, а скорее барочные решения в другой. То есть проблема может быть легко смоделирована с использованием объектов, передающих сообщения, или с помощью процедур.
Языки программирования могут поддерживать парадигмы за пределами, которые они поддерживают, но это требует от программиста реализации необходимых структур. Например, вы можете делать ООП с помощью C; на самом деле, некоторые OO-расширения C опирались на препроцессоры, которые генерировали C-код в качестве вывода.
По мере того, как вы продвигаетесь в своих исследованиях, вам нужно посмотреть на другие парадигмы, особенно функциональное программирование. Было бы неловко смотреть на логическое программирование (как проиллюстрировано Prolog) и (см. Pure Data для примера).
Ответ 3
Java - это язык, который в основном используется для объектно-ориентированного программирования, а C - язык, используемый в основном для процедурно-ориентированного программирования.
Существует большое объяснение Википедия о процедурных программах и объектно-ориентированном программировании:
Сравнение с объектно-ориентированным программирование В центре внимания процедурного программирование - это задачи программирования в сборник переменные, структуры данных и подпрограмм, тогда как в объектно-ориентированное программирование сломать задачу программирования в объекты с каждым "объектом" инкапсулирование собственных данных и методов (подпрограммы). Самое важное различие заключается в том, что процедура программирование использует процедуры для работы на структурах данных, объектно-ориентированных программирование связывает два поэтому "объект" действует на своих "собственных" структура данных. Номенклатура варьируется между ними, хотя у них есть почти такая же семантика: объектно-ориентированный процедурный методы функции объектов модули переменная атрибута аргумента сообщения
Но для того, чтобы сделать вещи более понятными, вы можете думать о таких объектах, как вы думаете об объектах в реальном мире, таких как автомобиль, который будет иметь все атрибуты автомобиля, как другие объекты, такие как окна и шины.
Ответ 4
Я дам вам самый простой и интуитивный ответ, который вы можете получить.
(Учитывая Java - объектно-ориентированный язык, а C - процедурный язык)
Объектно-ориентированный язык
- Основная концепция объектов (рассмотрим автомобиль)
- объекты имеют свойства, которые их определяют, они могут быть постоянными или меняющимися (автомобиль красный, модель 2004 года и имеет круиз-контроль, а также в настоящее время имеет 100K на одометре и топливе 3/4).
- объекты могут быть отправлены сообщения, которые влияют на него (автомобиль может быть выведен из A в B, автомобиль может быть заправлен топливом).
Процедурный язык
- Основная концепция процесс (подумайте о размещении в онлайн-заказе)
- для завершения процесса он должен пройти несколько шагов (заказ должен быть отправлен на склад, (2) в коробке и (3) отправлен)
- одним из шагов может быть сам процесс, или он может быть атомарным
Ответ 5
Языки OO упрощают запись объектно-ориентированных программ, предлагая вам конструкции, позволяющие легко абстрагировать данные и полиморфизм.
Ответ 6
Парадигма объектно-ориентированного программирования сообщает вам инкапсулировать переменные состояния в объекты, называемые "объекты", которые обмениваются данными путем передачи сообщений, чаще всего реализуются как функции с аргументом "special" this
или self
.
Объектно-ориентированный язык программирования - это язык, призванный облегчить использование парадигмы оо. Его семантика и синтаксис направлены на достижение этой цели. Наследование (на основе классов или прототипа) и полиморфизм подтипов являются важными методами, которые делают на практике абстрактную концепцию о.
Ответ 7
Объектно-ориентированные языки построены вокруг идеи структур данных, называемых объектами, каждая из которых содержит свои собственные данные и поведение. Объединив эти объекты и взаимодействуя с ними, вы можете создать программу, которая лучше отражает область проблемы, которую вы пытаетесь решить.
Например, в банковском приложении могут быть объекты, которые представляют собой учетные записи, каждая из которых хранит данные, такие как баланс, и реализует определенные виды поведения, такие как перенос денег.
На более традиционном языке вы будете хранить данные и поведение в разных местах.
Ответ 8
Помимо попыток охарактеризовать язык как имеющий определенную парадигму в его основе, вы можете найти эту статью из Уильяма Р. Кука полезной: Познание данных абстракция, пересмотренный. Там версия проекта. Он исследует разницу между абстрактными типами данных и объектами - различие, которое после многих лет поглощения на разных языках программирования я больше не мог видеть.
Я нашел статью через последнее эссе Гая Стил, Почему объектно-ориентированным языкам нужны хвостовые вызовы.
Ответ 9
OOP упрощает разбиение одной большой проблемы на более мелкие автономные части. Затем вы можете создать нечто более сложное, объединив эти части.
Ответ 10
Объектно-ориентированный язык - это то, о чем вы думаете в терминах объектов. Однако это требует много навыков. Вы не можете взять C-код и наполнить его объектом и назвать его ООП. Ключевыми понятиями ООП являются наследование, инкапсуляция и динамическое связывание.
Ответ 11
Программа может быть концептуально организована двумя способами, вокруг ее кода или данных. Первый подход называется процессно-ориентированной моделью. Второй подход называется объектно-ориентированной моделью.