Я новичок в объектно-ориентированном программировании, и я не понимаю, какова цель основного.
Да, я читал, что это «точка входа» в программу, но я не понимаю, что должно быть в основном? И каковы его обязанности?
Может случиться так, что что-то написанное в main может быть инкапсулировано в другой объект, но насколько вы должны использовать этот подход?
Вот моя самая первая основная статья, которую я написал на Java, она очень проста, но может помочь вам лучше понять мои сомнения. У меня есть абстрактный класс Animal, который расширен "Cat" и "Dog". Я использовал main для создания некоторого объекта, а также как «интерфейс» с пользователем, действительно, как вы можете видеть, я использовал некоторую условную инструкцию, чтобы «спросить пользователя», что он хочет сделать.
Мой вопрос возник из-за того, что интерфейс мог быть инкапсулирован в другой объект и не передавал эту ответственность основному.
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("What type of animal do you want to create? \n dog cat");
String type = input.nextLine();
if ( Objects.equals(type, "dog")){
System.out.println("Enter the animal's age: ");
int age = input.nextInt(); // Scans the next token of the input as an int.
System.out.println("Enter the animal's name: ");
String name = input.next();
Dog first = new Dog(name, age);
}
else if ( Objects.equals(type, "cat")) {
System.out.println("Enter the animal's age: ");
int age = input.nextInt(); // Scans the next token of the input as an int.
System.out.println("Enter the animal's name: ");
String name = input.next();
Cat first = new Cat(name, age);
}
else{
System.out.println("Error: the specified type does not exist.");
}
System.out.println("The number of animals is:" + numberOfAnimals);
}
main
Функция не является понятием из объектно - ориентированного программирования.Ответы:
Во-первых, ваш пример не является объектно-ориентированной программой. Это процедурная программа, которая хранит данные в объектах, потому что это инструмент, который ваш язык (Java?) Предоставляет для структурированных данных.
Истинный объектно-ориентированная программа состоит из объектов , которые взаимодействуют друг с другом - это о поведении , а не данных (я понимаю , что это спорное утверждение, так вот ссылка , где вы можете увидеть несколько определений объектно-ориентированного программирования от людей с большим количеством учетных данных чем я; обратите внимание, что поведение появляется в большинстве из них).
В настоящей объектно-ориентированной программе, согласно определению, которое я использую, у вас есть независимые объекты, взаимодействующие друг с другом. Роль
main
функции заключается в создании начальных объектов и их соединении.В качестве простого примера рассмотрим веб-приложение, построенное поверх базы данных. Это приложение может быть разбито на объекты разными способами, но вот один из них:
Networking
объект, который принимает соединения, анализирует HTTP-запрос и отправляет соответствующийController
объект, который взаимодействует сDatabase
объектом и выдает ответ (если вы хотите чтобы связать один или несколькоView
объектов с каждым контроллером, не стесняйтесь делать это). Вы также можете добавитьThreadpool
объект для обеспечения отдельных потоков выполнения.Роль
main
в этом приложении может быть:Database
объектController
объекты и свяжите их сDatabase
объектомNetwork
объект и свяжите всеController
объекты с ним.Network
запущенный объект (который также может включать созданиеThreadpool
и подключение к немуNetwork
).Эти шаги настройки могут быть явно указаны в
main
или они могут быть обработаны другим объектом. Например, в типичном приложении Spring все, чтоmain
делает функция, - это создает контекст приложения (один объект). Это инициирует создание и подключение всех объектов, упомянутых в конфигурации для этого контекста приложения.источник
main
метода не может даже существовать.Map
). Но Java предоставляет только один способ сделать это (по сравнению с C ++, который различает структуры и классы). Поэтому определяйте классы без поведения, потому что это облегчает понимание вашей программы, но следует понимать, что это не делает вашу программу «объектно-ориентированной».Смотря как. Возьмите это к двум крайностям:
main
. Это будет компилироваться и работать хорошо. Но для человека код не будет усваиваемым.main
и вызовите ее,doWhatNeedsToBeDone
и, в конце концов, продолжайте в том же духе. Теперь у вас очень аккуратно,main
но, конечно, вы не получаете того, что нужно сделать.Итак, истина где-то посередине. Попробуйте создать
main
файл, который умещается на одной странице, чтобы кто-то мог понять, какие основные инструкции необходимо выполнить. Получение правильной границы просто вопрос опыта.Вышесказанное является общим правилом и применимо как к ОО, так и к функциональному программированию.
источник
Основной статический метод существует как переход от не объектно-ориентированного мира к объектно-ориентированному миру. Так было сделано по крайней мере с C ++ в 80-х.
Статические методы - это, по сути, не объектно-ориентированные методы: они могут быть процедурными методами; они могут быть функциональными методами. Понятие статических методов по сути является выходом ООП из других парадигм программирования.
Java, C # и C ++ используют статический main как переход от традиционного main в стиле C к соответствующему языку программирования, из которого вы теперь можете использовать объекты (или нет) по своему желанию.
Эти языки могли бы потребовать первичного экземпляра объекта вместо статического основного, но вместо этого выбрали статический основной подход. Используя альтернативный подход к экземпляру,
main
класс будет подклассомthread
класса, а среда выполнения языка вызовет заклинание начального экземпляра объектаmain
и затем вызовет егоrun
метод экземпляра, во многом способ запуска / создания дополнительных потоков.Но исторически это было сделано другим путем: частично, эти языки просто следуют их примеру, а частично, потому что многопоточность не была приоритетом в те дни, поэтому они использовали более простой статический подход.
Кроме того, статический основной подход «проще» в том
hello world
смысле, что вам не нужно использовать подклассы, поэтому тривиальные обучающие программы, такие как , в некотором смысле проще (хотя они используют относительно необъяснимоеstatic
, что трудно кому-то объяснить, когда вы пытаюсь сначала научить ООП.)источник
Метод Main () используется для запуска программы
Ответственность. После запуска вашей программы метод Main () вызывает другие методы для запуска вашей программы.
Это простой ответ, который помогает мне понять, какова ответственность метода Main ().
источник