구조적 프로그래밍과 객체 지향 프로그래밍의 차이점을 보여주는 프레젠테이션을 만들고 있는데 OOP 개념을 적용하면 코딩이 훨씬 쉬워 져 청중이 실제로 OOP가 필요하다고 느끼는 예를 통해 사람들이 OOP가 필요한 이유 를 설명하고자합니다 .
어떤 아이디어 ??
구조적 프로그래밍과 객체 지향 프로그래밍의 차이점을 보여주는 프레젠테이션을 만들고 있는데 OOP 개념을 적용하면 코딩이 훨씬 쉬워 져 청중이 실제로 OOP가 필요하다고 느끼는 예를 통해 사람들이 OOP가 필요한 이유 를 설명하고자합니다 .
어떤 아이디어 ??
답변:
이 빠른 비디오 블로그를 보러 갈 수 있습니다 . 결론은 구조적 프로그래밍과 OO 프로그래밍의 차이점은 추가하는 것이 아니라 프로그래밍에서 빼앗는 것의 문제라는 것입니다. 구조적 프로그래밍 및 객체 지향 프로그래밍과 같은 소프트웨어 분야는 제한적이며 활성화되지 않습니다. 다음은 몇 가지 정의입니다. 경고 : 당신은 그들을 좋아하지 않을 것입니다.
구조화 된 프로그래밍은 goto (직접 제어의 이전)에 부과되는 규율입니다.
OO 프로그래밍은 함수에 대한 포인터에 부과되는 규율 (간접 제어 전달)
기능 프로그래밍은 할당시 부과됩니다.
첫 번째는 이해하기 어렵지 않습니다. Dijkstra는 알고리즘에서 goto가 허용 될 때 일반적인 정확성 증명을 작성하는 것이 불가능하다는 것을 발견했습니다. 제어 구조는 시퀀스 선택 및 반복 한정 하였다 그러나 만약, 다음의 정확성 증거가 있었다 가능. 물론 오늘날 우리는 올바른 것을 증명하려고하지 않지만 구조화 된 프로그래밍의 단순함과 우아함을 좋아합니다.
OO를 이해하는 것이 조금 더 어렵습니다. 우리는 종종 OO를 캡슐화, 상속 및 다형성으로 정의합니다. 무엇을 알고 작은 것은 이러한 특성의 세 가지를 모두 달성 할 수있다, 자주 있다는 것이다 되었다 그것은 C로 캡슐화 하드 사실이 아니다 C. 아래로 컴파일도 아니다 빌드로 어려운 것으로, 실제로 C에 불과 전처리로 시작 C ++를 달성 서로의 하위 집합 인 데이터 구조로 상속을 시뮬레이션합니다. 그러나 다형성은 조금 더 어렵다. C에서는 잘 관리하기 어려운 함수에 대한 포인터가 필요합니다. C ++과 같은 언어가 우리에게 준 언어는 함수에 대한 포인터에 부과 된 규칙이었습니다. C ++ 컴파일러는 우리를 위해 vtable을 만들고 엄격한 형식에 따라 포인터를 초기화했습니다. 매우 실제적인 의미에서 OO는 단순히 징계를받습니다.제어의 간접적 인 전달, 즉 함수에 대한 포인터.
구조적 프로그래밍은 goto를 사용 하지 않는 방법에 관한 것 입니다. OO는 함수에 대한 포인터를 사용 하지 않는 방법에 관한 것입니다. 그리고 함수형 프로그래밍 역시 해야 할 일이 아닙니다 . 함수형 프로그래밍에서는 가장 엄격하게 제어되는 경우를 제외하고 변수를 할당하지 않습니다.
결국, 이러한 모든 프로그래밍 "기술"은 실제로 기술을 가능하게하는 것이 아니라 훈련을 제한합니다. 그들은 무엇을 우리에게 이야기 하지 더 그들이 무엇을 우리에게보다해야 할 않습니다. 이는 지난 40 년 동안 소프트웨어 개발이 성장하지 않았 음을 의미합니다. 오히려 줄어들었다. 우리 가하지 말아야 할 모든 것을 배웠 으므로 더욱 제약을 받습니다.
하지 말아야 할 것을 배우는 것이 좋습니다. 하지만 여기에 방해 질문입니다 : 새로운 것을 우리가 배운 것을 할 수 있습니까?
컴퓨터를 프로그래밍하는 기본 방법에는 3 가지가 있습니다.
goto
구식 BASIC 인터프리터 또는 어셈블리 언어와 같은 s를 사용한 비정형 프로그래밍 더 이상 이런 방식으로 프로그래밍하는 사람은 거의 없습니다.내 생각에 객체 지향 프로그래밍은 다르다. 프로그램을 더 큰 규모로 구성하는 방법에 관한 것입니다. 위에서 언급 한 3 가지 패러다임을 대체하거나 폐기하지 않습니다. 메서드 본문 내에서 목록에서 3 개의 패러다임 중 하나를 선택해야합니다.
변화를 예상하는 방법에 관한 것입니다.
두 개념 모두 재사용 가능성에 적합하지만, OOP는보다 쉬운 변경을위한 문을 엽니 다. OOP는 Structural Programming의 재사용 가능성을 모두 갖추고 있지만이를 사용하면 적은 노력으로 새로운 기능을 만들 수 있습니다.
OOP는 상속의 추가 기능으로 구조 프로그래밍의 모든 기능을 상속한다고 말할 수 있습니다! :-디
개념은 직교입니다. 구조화 된 프로그래밍은 프로 시저 / 함수 / 방법 내에서 코드를 구성하는 것입니다. OOP를 수행 할 때 클래스 메소드 내에서 구조화 된 프로그래밍 원칙을 따르는 것이 완벽하고 가능합니다.
그것은 일종의 주관적인 표현입니다. 구조적 프로그래밍과 OOP는 문제를 해결하는 스타일이며 하나는 항상 다른 것보다 낫지는 않습니다. 입력 데이터에 대해 변환을 수행하는 구조화 된 스타일로 수행하면 수치 분석법 라이브러리를 작성하는 것이 좋습니다. 그러나 상태 머신으로 구동되는 간단한 에이전트는 Java 또는 C ++에서 자체 포함 클래스로 쉽게 표현할 수 있습니다. OOP는 데이터 구조를위한 스토리지 컨테이너를 표현하는 자연스러운 방법입니다.
정보 숨기기 및 모듈화에 대해 이야기하는 것은 OOP를 스타일로 자연스럽게 동기를 부여하는 좋은 방법입니다.
이 문제에 대한 흥미로운 설명은 Steve Yegge 가 작성했습니다 . 두 가지 스타일의 접근 방식의 차이점에 대한 더 나은 설명 중 하나입니다.
비즈니스 모델을 만들 때 OOP를 이해하기가 더 쉽습니다. 응용 프로그램의 요소에 대해 생각할 때 책과 저자, 제목, ISBN과 같은 일부 개체와 관계를 사용하십시오. 책은 도서관에 두어야하며 학생이 빌릴 수 있습니다. 구조적 프로그래밍은 특정 프로세스, 추상화가 아닌 구현에 대한 사고를 강요합니다.
OOP는 쉽게 변경할 수 있도록 설계되었습니다. 구조적 프로그램의 변경이 가능하지만 코드로 설명해야합니다. OO 프로그램의 변경은 추상적 모델 변경으로 설명 할 수 있습니다.
변수 범위 :
좋은 프로그래밍을 보장하는 언어의 원칙은 변수의 범위 를 제한 하는 것이라고 생각 합니다. C와 같은 구조화 된 언어에서 범위는 주로 두 가지 유형입니다.
우리 모두는 세계적인 범위가 해롭다는 것을 알고 있습니다. 그러나 때로는 로컬 범위로는 프로그램을 실행하기에 충분하지 않습니다. 전역 범위를 피하면 포인터를 더 광범위하게 사용하는 경향이있어 범위 밖의 변수를 사용할 수 있습니다. 그러나 포인터는 이해하고 사용하기가 어렵습니다.
C ++과 같은 OOP 언어는 캡슐화를 통해 새로운 유형의 범위- 클래스 / 객체 범위 를 추가합니다. 이 범위는 개인 / 공개 변형에 의해 더욱 향상됩니다. 그리고 이것은 가변 범위 지정의 많은 문제를 해결합니다. 범위는 OOP에서 더 정의됩니다. 그리고 포인터가 덜 필요합니다.
이것은 OOP의 가장 큰 특징 중 하나입니다.