이 장에서는 객체 지향(OO)에 대해 알아보고 이것이 소프트웨어 시스템 개발 프로세스에 가져오는 이점을 살펴보겠습니다.
이 질문에 답하기 위해 먼저 구조적 프로그래밍 방법(함수형 프로그래밍이라고도 함)을 사용하여 소프트웨어 시스템을 설계하는 방법을 간략하게 살펴보겠습니다.
구조적 프로그래밍에서 일반적인 방법은 문제를 분석하고 이를 함수로 나누어 특정 작업을 수행하는 것입니다. 이러한 함수의 대부분은 처리할 데이터 유형이 필요합니다. 기능 시스템의 데이터는 일반적으로 데이터베이스에 저장되거나 전역 변수.
로 메모리에 보관될 수 있습니다.학교 관리 시스템의 간단한 예를 들어보겠습니다. 이 시스템은 학교의 모든 학생과 강사의 세부 정보를 저장합니다. 동시에, 학교에서 제공되는 강좌에 대한 정보도 관리하고, 어떤 학생이 어떤 강좌를 수강하고 있는지 추적합니다.
시스템은 학생, 교사, 시험 및 강좌에 대한 정보를 저장해야 하며 다음과 같은 기능으로 설계되었습니다.
여기에서 다음과 같이 데이터, 기능 및 종속성에 대한 다이어그램을 작성할 수 있습니다.
이 접근 방식의 문제점은 해결하려는 문제가 너무 복잡해지면 시스템을 유지 관리하기가 점점 더 어려워진다는 것입니다. 위의 예에서 "생년월일"을 두 단어 숫자에서 네 자리 숫자로 변환하는 등 요청으로 인해 학생이 데이터를 처리하는 방식이 변경되면 어떻게 될까요? 이런 작은 변화만으로도 예상치 못한 부작용이 발생하고 심각한 문제가 발생할 수 있습니다. 시험, 과목, 선생님의 데이터는 모두 학생의 데이터에 의존합니다. 또한 add_student, enter_for_exams, issue_certificate 및 expel_student 기능이 손상되었을 수 있습니다. 예를 들어, add_student는 "생년월일"에 4자리 대신 2자리 데이터가 필요하기 때문에 더 이상 작동하지 않습니다.
위의 예에서 함수와 데이터 간의 상호의존성을 포함하여 구조적 프로그래밍의 몇 가지 단점을 볼 수 있으며, 이는 유지관리가 어렵다, 확장하기 어렵고예상치 못한 문제가 발생하기 쉽습니다. 데이터를 변경할 때. 이러한 문제를 해결하기 위해서는 새로운 접근 방식이 필요합니다. 바로 객체지향(OO)
입니다.객체:는 두 가지 주요 구성 요소로 구성된 특정 엔터티로 이해될 수 있습니다.
속성: 객체의 정보 및 특성입니다.
메서드: 객체가 수행할 수 있는 작업 및 동작입니다.
위의 학교 관리 시스템 문제의 예에서 다음과 같은 개체를 가질 수 있습니다.
클래스:는 객체가 갖게 될 사전 정의된 속성과 메서드를 포함하는 데이터 유형입니다. 클래스를 객체 생성을 위한 템플릿으로 이해할 수 있습니다.
예: 클래스 학생은 이름, 생년월일 및 학교 등록과 같은 기타 행위와 같은 공통 속성 및 방법을 포함하여 모든 학생을 위한 공통 정의 템플릿입니다. 대상은 학생이라는 클래스의 특성을 지닌 2004년생 Nguyen Van A
라는 특정 학생입니다.캡슐화는 효과적인 관리 및 사용을 위해 관련 속성과 메서드를 동일한 클래스로 그룹화하는 것입니다. 이렇게 하면 복잡성이 줄어들고 보안이 향상되는 동시에 코드 유지 관리 및 확장도 쉬워집니다.
public class Student { private String name; private String dateOfBirth; public void registerForCourse(Course course) { course.addStudent(this); } }
학생 정보는 Student 클래스에 캡슐화되며, Student와 관련된 작업은 이 클래스의 메서드를 통해 수행됩니다.
상속
상속을 사용하면 하위 클래스가 상위 클래스의 속성과 메서드를 상속하여 소스 코드를 최적으로 재사용하고 기능을 쉽게 확장할 수 있습니다.
public class Person { private String name; private String dateOfBirth; } public class Student extends Person { private double gpa; } public class Teacher extends Person { private String department; }
Student 및 Teacher는 모두 Person 클래스에서 상속되므로 공통 속성을 재사용하는 데 도움이 됩니다. 각 하위 클래스는 별도의 속성이나 메서드를 추가할 수 있습니다.
다형성을 사용하면 메서드를 다양한 방식으로 구현할 수 있습니다. 즉, 메서드를 다른 동작으로 하위 클래스에서 재정의할 수 있습니다.
public class Person { public void introduce() { System.out.println("I am a person."); } } public class Student extends Person { @Override public void introduce() { System.out.println("I am a student."); } } public class Teacher extends Person { @Override public void introduce() { System.out.println("I am a teacher."); } } public class Main { public static void main(String[] args) { Person person = new Person(); Person student = new Student(); Person teacher = new Teacher(); person.introduce(); // I am a person. student.introduce(); // I am a student. teacher.introduce(); // I am a teacher. } }
introduce 메소드는 Person 클래스에 정의되고 Student 및 Teacher 하위 클래스에서 재정의됩니다. Person 유형을 사용하더라도 introduce 메소드 호출 시 시스템은 실제 객체(Student 또는 Teacher)에 적합한 메소드를 사용합니다. ), 다형성을 나타냅니다.
추상화는 특정 구현 세부 사항에 너무 집중하지 않고 일반적인 개념으로 작업하여 유연성을 높이고 복잡성을 줄이는 방법입니다.
public class Student { private String name; private String dateOfBirth; public void registerForCourse(Course course) { course.addStudent(this); } }
추상화를 사용하면 일반 메소드(startCourse())를 사용하여 추상 클래스(Course)를 정의합니다. MathCourse 및 ScienceCourse와 같은 하위 클래스에서는 이러한 메서드를 세부적으로 구현하여 시스템을 쉽게 확장하고 사용자 정의할 수 있습니다.
위 내용은 객체 지향 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!