객체 지향 소개
이 장에서는 객체 지향(OO)에 대해 알아보고 이것이 소프트웨어 시스템 개발 프로세스에 가져오는 이점을 살펴보겠습니다.
소프트웨어 개발에 객체 지향(OO)이 왜 필요한가요?
이 질문에 답하기 위해 먼저 구조적 프로그래밍 방법(함수형 프로그래밍이라고도 함)을 사용하여 소프트웨어 시스템을 설계하는 방법을 간략하게 살펴보겠습니다.
1. 구조화된 프로그래밍:
구조적 프로그래밍에서 일반적인 방법은 문제를 분석하고 이를 함수로 나누어 특정 작업을 수행하는 것입니다. 이러한 함수의 대부분은 처리할 데이터 유형이 필요합니다. 기능 시스템의 데이터는 일반적으로 데이터베이스에 저장되거나 전역 변수.
로 메모리에 보관될 수 있습니다.학교 관리 시스템의 간단한 예를 들어보겠습니다. 이 시스템은 학교의 모든 학생과 강사의 세부 정보를 저장합니다. 동시에, 학교에서 제공되는 강좌에 대한 정보도 관리하고, 어떤 학생이 어떤 강좌를 수강하고 있는지 추적합니다.
시스템은 학생, 교사, 시험 및 강좌에 대한 정보를 저장해야 하며 다음과 같은 기능으로 설계되었습니다.
- 추가_학생
- enter_for_exam
- check_exam_marks
- 발급_인증서
- expel_student
여기에서 다음과 같이 데이터, 기능 및 종속성에 대한 다이어그램을 작성할 수 있습니다.
이 접근 방식의 문제점은 해결하려는 문제가 너무 복잡해지면 시스템을 유지 관리하기가 점점 더 어려워진다는 것입니다. 위의 예에서 "생년월일"을 두 단어 숫자에서 네 자리 숫자로 변환하는 등 요청으로 인해 학생이 데이터를 처리하는 방식이 변경되면 어떻게 될까요? 이런 작은 변화만으로도 예상치 못한 부작용이 발생하고 심각한 문제가 발생할 수 있습니다. 시험, 과목, 선생님의 데이터는 모두 학생의 데이터에 의존합니다. 또한 add_student, enter_for_exams, issue_certificate 및 expel_student 기능이 손상되었을 수 있습니다. 예를 들어, add_student는 "생년월일"에 4자리 대신 2자리 데이터가 필요하기 때문에 더 이상 작동하지 않습니다.
위의 예에서 함수와 데이터 간의 상호의존성을 포함하여 구조적 프로그래밍의 몇 가지 단점을 볼 수 있으며, 이는 유지관리가 어렵다, 확장하기 어렵고예상치 못한 문제가 발생하기 쉽습니다. 데이터를 변경할 때. 이러한 문제를 해결하기 위해서는 새로운 접근 방식이 필요합니다. 바로 객체지향(OO)
입니다.2. 객체 지향:
2.1. 컨셉:
객체:는 두 가지 주요 구성 요소로 구성된 특정 엔터티로 이해될 수 있습니다.
속성: 객체의 정보 및 특성입니다.
메서드: 객체가 수행할 수 있는 작업 및 동작입니다.
위의 학교 관리 시스템 문제의 예에서 다음과 같은 개체를 가질 수 있습니다.
클래스:는 객체가 갖게 될 사전 정의된 속성과 메서드를 포함하는 데이터 유형입니다. 클래스를 객체 생성을 위한 템플릿으로 이해할 수 있습니다.
예: 클래스 학생은 이름, 생년월일 및 학교 등록과 같은 기타 행위와 같은 공통 속성 및 방법을 포함하여 모든 학생을 위한 공통 정의 템플릿입니다. 대상은 학생이라는 클래스의 특성을 지닌 2004년생 Nguyen Van A
라는 특정 학생입니다.2.2. OOP의 기본 원칙:
캡슐화
캡슐화는 효과적인 관리 및 사용을 위해 관련 속성과 메서드를 동일한 클래스로 그룹화하는 것입니다. 이렇게 하면 복잡성이 줄어들고 보안이 향상되는 동시에 코드 유지 관리 및 확장도 쉬워집니다.
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와 같은 하위 클래스에서는 이러한 메서드를 세부적으로 구현하여 시스템을 쉽게 확장하고 사용자 정의할 수 있습니다.
3. 객체 지향 프로그래밍의 장점:
- 상속 덕분에 코드를 반복하지 않고도 클래스를 확장할 수 있어 중복을 최소화하고 효율성을 높일 수 있습니다.
- 시간을 절약하고 생산성을 높이세요.
- 클래스와 객체의 개념은 구조 지향 프로그래밍의 한계를 극복하면서 컴퓨터에서 실제 개체를 보다 자연스럽고 명확하게 시뮬레이션하는 데 도움이 됩니다.
위 내용은 객체 지향 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











일부 애플리케이션이 제대로 작동하지 않는 회사의 보안 소프트웨어에 대한 문제 해결 및 솔루션. 많은 회사들이 내부 네트워크 보안을 보장하기 위해 보안 소프트웨어를 배포 할 것입니다. ...

시스템 도킹의 필드 매핑 처리 시스템 도킹을 수행 할 때 어려운 문제가 발생합니다. 시스템의 인터페이스 필드를 효과적으로 매핑하는 방법 ...

데이터베이스 작업에 MyBatis-Plus 또는 기타 ORM 프레임 워크를 사용하는 경우 엔티티 클래스의 속성 이름을 기반으로 쿼리 조건을 구성해야합니다. 매번 수동으로 ...

많은 응용 프로그램 시나리오에서 정렬을 구현하기 위해 이름으로 이름을 변환하는 솔루션, 사용자는 그룹으로, 특히 하나로 분류해야 할 수도 있습니다.

IntellijideAultimate 버전을 사용하여 봄을 시작하십시오 ...

Java 객체 및 배열의 변환 : 캐스트 유형 변환의 위험과 올바른 방법에 대한 심층적 인 논의 많은 Java 초보자가 객체를 배열로 변환 할 것입니다 ...

전자 상거래 플랫폼에서 SKU 및 SPU 테이블의 디자인에 대한 자세한 설명이 기사는 전자 상거래 플랫폼에서 SKU 및 SPU의 데이터베이스 설계 문제, 특히 사용자 정의 판매를 처리하는 방법에 대해 논의 할 것입니다 ...

데이터베이스 쿼리에 tkmyBatis를 사용하는 경우 쿼리 조건을 구축하기 위해 엔티티 클래스 변수 이름을 우아하게 가져 오는 방법이 일반적인 문제입니다. 이 기사는 고정 될 것입니다 ...
