문제

나는 최근에 논쟁과 동료들이지의 OOP.어떤 나의 관심은 무엇을 그는 말했다:

"어떤게 하 나의 코딩을까?는 경우 그것은 다시 사용할 수 있을 만든 라이브러리 및 전화는 어떤 기능이 필요 무엇이든 작업은 손에 있습니다.해야 합니까 이러한 개념을 다형성,상속 인터페이스,패턴이나 있을 수 있습니다."

우리는 작은 회사에서 개발하는 작은 프로젝트를 위한 전자 상거래 사이트 및 부동산입니다.

어떻게 이용할 수 있습니 OOP 에서는"일상적인,현실 세계"설치?거나 OOP 정말 의미한 복잡한 문제를 해결하기 위해지 의도에 대한"일상"개발은 무엇입니까?

도움이 되었습니까?

해결책

OOP에 대한 좋은 점은 데이터 세트를 일련의 동작에 묶는 것입니다.

따라서 관련 데이터 세트에서 많은 관련 작업을 수행 해야하는 경우 구조물에서 작동하는 많은 기능을 작성하거나 객체를 사용할 수 있습니다.

객체는 상속 형태의 코드 재사용 도움말을 제공합니다.

IME, 복잡한 구조 세트와 그에 따라 작동하는 기능을 유지하는 것이 알려진 일련의 속성과 방법을 가진 객체로 작업하는 것이 더 쉽습니다.

어떤 사람들은 상속과 다형성에 대해 계속할 것입니다. 이것들은 가치가 있지만 OOP의 실제 가치는 (내 의견으로는) 데이터를 동작과 캡슐화하고 연결하는 좋은 방법에서 비롯됩니다.

프로젝트에서 OOP를 사용해야합니까? 그것은 당신의 언어가 OOP를 얼마나 잘 지원하는지에 달려 있습니다. 이는 해결해야 할 문제의 유형에 따라 다릅니다.

그러나 작은 웹 사이트를 수행하고 있다면 여전히 개발 언어에서 적절한 지원을받은 OOP 디자인을 사용할 수있는 충분한 복잡성에 대해 이야기하고 있습니다.

다른 팁

내 개인적 견해 : 문맥

OOP에서 프로그래밍하면 상황에 대한 인식이 높아집니다. 현실 세계가 객체 지향적이기 때문에 이해하기 쉬운 방식으로 코드를 구성하는 데 도움이됩니다.

친구의 요점 인 잘 설계된 OO 디자인은 이해, 따라, 확장, 확장 및 구현하기가 더 쉽습니다. 예를 들어 범주 적으로 유사하거나 함께 유지 해야하는 데이터를 보유하는 작업을 위임하는 것이 훨씬 쉽습니다 (예 C 구조조차 객체입니다).

만,나는 확실히 많은 사람들이 많이 줄 것이 더 많은 학문적으로 올바르게 답하지만,여기에 내에 약간의 가장 귀중한 이점:

  • OOP 할 수 있습에 대한 더 나은 캡슐에 넣기
  • OOP 으로 프로그래머는 생각에 더 많은 논리적인 용어,소프트웨어를 만들기 쉽게 프로젝트를 디자인하고 이해(잘 설계된 경우)
  • OOP 는 시간을 크게 절약할 수 있습니다.예를 들어보고,당신이 할 수 있는 일으로 C++문자열체,벡터,등등.모든 기능(그리고 훨씬 더)는"에 대한 무료입니다." 지금은,사람들은 정말 기능의 클래스 라이브러리와 아 OOP,그 자체이지만 거의 모든 OOP 구현와 함께 좋은 클래스 라이브러리입니다.을 구현할 수 있습니에 모든 물건 C(또는 그것의 대부분)?확실합니다.그런데 왜 그것을 쓰는 자신?

디자인 패턴 사용을 보면 OOP의 유용성이 표시됩니다. 그것은 캡슐화와 재사용뿐만 아니라 확장 성과 유지 가능성에 관한 것입니다. 물건을 강력하게 만드는 인터페이스입니다.

몇 가지 예 :

  • 물체없이 스트림 (데코레이터 패턴)을 구현하는 것은 어렵습니다.

  • 새로운 암호화 유형 (전략 패턴)과 같은 기존 시스템에 새 작업을 추가하는 것은 객체없이 어려울 수 있습니다.

  • 데이터베이스 책에서 데이터베이스를 구현해야한다고 말하는 방식대로 PostgreSQL이 구현되는 방식을 살펴보십시오. 큰 차이가 나타납니다. 이 책은 각 연산자의 노드 객체를 제안합니다. Postgres는 무수한 테이블과 매크로를 사용하여 이러한 노드를 모방하려고합니다. 그로 인해 확장하기가 훨씬 덜 예쁘고 훨씬 어렵습니다.

목록이 계속됩니다.

대부분의 프로그래밍 언어의 힘은 그들이 이용할 수있는 추상화에 있습니다. 객체 지향 프로그래밍은 관련 아이디어 나 행동 간의 관계를 관리 할 수있는 방식으로 매우 강력한 추상화 시스템을 제공합니다.

임의의 영역을 계산하는 과제를 고려하고 모양을 확장하는 모양을 고려하십시오. 모든 프로그래머는 원, 정사각형, 삼각형, ECT의 영역에 대한 기능을 신속하게 작성할 수 있습니다. 도서관에 보관하십시오. 임의의 모양의 영역을 식별하고 계산하는 프로그램을 작성하려고 할 때 어려움이 발생합니다. 새로운 종류의 모양을 추가 할 때마다 펜타곤을 말하면 업데이트하고 같은 것을 확장해야합니다. IF 또는 CASE 프로그램이 새로운 모양을 식별하고 "기능 라이브러리"에서 올바른 영역 루틴을 호출 할 수 있도록 구조. 잠시 후,이 접근법과 관련된 유지 보수 비용이 쌓이기 시작합니다.

객체 지향 프로그래밍을 사용하면 많은 것이 무료로 제공됩니다. 영역 방법이 포함 된 모양 클래스를 정의하십시오. 그런 다음 실행 시간에 어떤 특정 모양을 다루고 있는지는 중요하지 않습니다. 각 기하학적 그림을 모양에서 상속하고 영역 방법을 호출하는 객체로 만드십시오. 객체 지향 패러다임은이 순간 에이 사용자 입력을 통해 반 분 전에 추가 된 원, 삼각형, 정사각형, 펜타곤 또는 타원 옵션의 영역을 계산해야합니까?

면적 기능이 호출되는 방식 뒤에 인터페이스를 변경하기로 결정하면 어떻게됩니까? 객체 지향 프로그래밍을 사용하면 모양 클래스를 업데이트하면 변경 사항이 해당 클래스에서 상속되는 모든 엔티티로 자동으로 전파됩니다. 비 객체 지향 시스템을 사용하면 "기능 라이브러리"를 통해 슬로깅하고 각 개별 인터페이스를 업데이트하는 작업에 직면하게됩니다.

요약하면, 객체 지향 프로그래밍은 강력한 추상화 형태를 제공하여 코드의 반복을 제거하고 확장 및 유지 보수를 간소화하여 시간과 노력을 절약 할 수 있습니다.

모든 프로그래밍 패러다임은 같은 목표를 가지고 있습니다. 불필요한 복잡성을 숨기고 있습니다.

친구가 사용하는 것처럼 일부 문제는 명령적인 패러다임으로 쉽게 해결됩니다. 다른 문제는 객체 지향 패러다임으로 쉽게 해결됩니다. 다른 많은 것들이 있습니다 패러다임. 주요 프로그래밍 (논리 프로그래밍, 기능 프로그래밍 및 필수 프로그래밍)은 모두 서로 동일합니다. 객체 지향 프로그래밍은 일반적으로 필수 프로그래밍의 확장으로 생각됩니다.

객체 지향 프로그래밍은 프로그래머가 비슷하지만 동일하지 않은 항목을 모델링 할 때 가장 잘 사용됩니다. 명령적인 패러다임은 다양한 종류의 모델을 하나의 기능으로 만들 것입니다. 객체 지향 패러다임은 서로 다른 종류의 모델을 관련 객체의 다른 방법으로 분리합니다.

당신의 동료는 하나의 패러다임에 갇힌 것 같습니다. 행운을 빕니다.

1994 년경에 나는 동시에 OOP와 C ++를 이해하려고 노력했고, OOP의 가치가 무엇인지 이해할 수 있었음에도 불구하고 좌절감을 느꼈다. 나는 다른 언어 (주로 기본, 어셈블리 및 파스칼 가족 언어)의 응용 프로그램의 어떤 부분을 혼란스러워서 학문적 추상화에 찬성하여 생산성을 포기하는 것처럼 보였습니다. 불행히도, MFC와 같은 OO 프레임 워크와의 처음 몇 번의 만남은 해킹하기가 더 쉬워졌지만 반드시 깨달음에 많은 도움이되지는 않았습니다.

그것은 끈기, 대체 (비 C ++)에 대한 노출과 객체를 다루는 방법에 대한 노출, 그리고 1) 작업 한 OO 코드의 신중한 분석을 통해서만 사용되었습니다. 실제로 그것을 얻으려면. 그리고 15 년 후, 나는 절차 적 접근 방식에서 깔끔하게 할 수없는 영리하지만 인상적으로 간단한 OO 솔루션에 대한 새로운 (나에게) 발견에 정기적으로 놀랐습니다.

나는 지난 몇 년 동안 기능적 프로그래밍 패러다임을 이해하려고 노력하는 것과 같은 투쟁을 겪어 왔습니다. Paul Graham을 역설하기 위해, 당신이 Power Continuum을 내려다 보면, 당신은 빠진 모든 것을 볼 수 있습니다. Power Continuum을 찾을 때, 당신은 힘을 보지 못하고, 당신은 단지 이상 함을 볼 수 있습니다.

나는 다른 방식으로 무언가를하기 위해 노력하기 위해서는 1) 누군가가 더 강력한 구조로 더 생산적인 사람을보고 2) 자신이 벽에 부딪 칠 때 불신을 중단하는 것을 볼 수 있다고 생각합니다. 아마도 새로운 패러다임에 대한 그들의 이해에 적어도 조금 더 작은 멘토를 갖는 데 도움이 될 것입니다.

불신을 중단하는 데 필요한 gumption을 제외하고, 누군가가 OO 모델의 가치를 빠르게 맥주하기를 원한다면, 나는 당신이 누군가에게 Rails에 실용적인 프로그래머 책과 함께 일주일을 보내라고 요청하는 것보다 훨씬 더 나빠질 수 있다고 생각합니다. 불행히도 마법이 어떻게 작동하는지에 대한 많은 세부 사항을 남기지 만 OO 추상화 시스템의 힘에 대한 아주 좋은 소개입니다. 그 책을 통해 일한 후에도 동료가 여전히 어떤 이유로 oo의 가치를 보지 못하면, 그녀는 희망이없는 사건 일 수 있습니다. 그러나 그들이 효과가있는 OO 디자인을 가지고있는 접근 방식으로 작업하고 절차 언어로 같은 일을하는 것보다 0-60에서 훨씬 더 빨리 얻는 접근 방식으로 일하는 데 약간의 시간을 할애하려면 희망이있을 수 있습니다. 귀하의 작업에 웹 개발이 포함되지 않더라도 사실이라고 생각합니다.

"실제 세계"를 키우는 것이 좋은 앱을 작성하기위한 작업 프레임 워크만큼 판매 포인트가 될 것이라고 확신하지 않습니다. 특히 C# 및 Java와 같은 정적으로 입력 한 언어에서 실제 세계를 모델링하는 것이 밝혀졌습니다. 종종 구불 구불 한 추상화가 필요합니다. 당신은 "모양, 타원, 원)의 기하학적 추상화와 같이 표면적으로 단순한 것을 모델링하기 위해 고군분투하는 수천 명의 사람들을보고 현실 세계를 모델링하기가 어려운 구체적인 예를 볼 수 있습니다.

나에게, OOP의 힘은 상속과 다형성에 대해 이야기하기 시작할 때까지 그 자체로 표시되지 않습니다.

OOP에 대한 논쟁이 캡슐화와 추상화의 개념에 놓여 있다면, 그것은 나에게 매우 설득력있는 주장이 아닙니다. 거대한 라이브러리를 작성하고 사용자가 알고 싶어하는 인터페이스 만 문서화하거나 ADA의 패키지와 같은 언어 수준 구성에 의존하여 필드를 비공개로 만들고 원하는 것을 노출시킬 수 있습니다. 폭로하다.

그러나 일반적인 계층 구조로 코드를 작성할 때 실제 장점은 나중에 동일한 정확한 코드 인터페이스를 사용하여 동일한 결과를 달성하기 위해 나중에 재사용 할 수 있도록 나중에 재사용 할 수 있습니다.

이게 편리한 이유는 무엇입니까? 나는 거인의 어깨에 서서 현재의 임무를 수행 할 수 있기 때문입니다. 아이디어는 문제의 일부를 가장 기본적인 부분, 작곡하는 객체를 작성하는 객체, 프로젝트를 구성하는 객체로 끓일 수 있다는 것입니다. 일반적인 경우 행동을 잘 정의하는 클래스를 사용하면 동일한 입증 된 코드를 사용하여 동일한 버전의보다 구체적인 버전을 구축 한 다음 더 구체적인 버전을 만들 수 있습니다. 같은 버전. 핵심은 이러한 각 엔티티가 이미 코딩되고 테스트 된 공통성을 가지고 있으며 나중에 다시 상환 할 필요가 없다는 것입니다. 이를 위해 상속을 사용하지 않으면 공통 기능을 다시 구현하거나 새 코드를 이전 코드와 명시 적으로 연결하여 제어 흐름 버그를 도입 할 수있는 시나리오를 제공합니다.

다형성은 객체에서 특정 기능을 달성 해야하는 경우 매우 편리하지만 유사하지만 고유 한 유형에서도 동일한 기능이 필요합니다. 예를 들어, QT에서는 데이터를 표시 할 수 있고 해당 객체의 메타 데이터를 쉽게 유지할 수 있도록 모델에 항목을 삽입한다는 아이디어가 있습니다. 다형성이 없다면, 나는 현재보다 훨씬 더 자세하게 자신을 귀찮게해야합니다 (즉, 원래 모델을 사용하려는 항목과 동일한 비즈니스 로직을 수행하는 동일한 코드 인터페이스를 구현해야합니다). 내 데이터가 바운드 객체의 기본 클래스가 모델과 기본적으로 상호 작용하기 때문에 대신 문제 없이이 모델에 메타 데이터를 삽입 할 수 있습니다. 모델에 필요한 것에 대해 걱정하지 않고 객체에서 필요한 것을 얻습니다. 모델은 클래스에 추가 한 내용에 대해 걱정하지 않고 필요한 것을 얻습니다.

친구에게 시각화를 요청하십시오 어느 그의 방, 집 또는 도시에 반대하는 것 ... 그리고 그가 시스템 자체가 있고 의미있는 일을 할 수있는 단일 물체를 말할 수 있다면.

버튼과 같은 것들이 혼자서하는 일을하지 않습니다. 전화를 걸려면 많은 물건이 필요합니다.
마찬가지로 자동차 엔진은 크랭크 샤프트, 피스톤, 점화 플러그로 만들어집니다. 죄송합니다. 개념은 자연 과정이나 우리 삶의 사물에 대한 우리의 인식에서 발전했습니다.

"Inside Com"책은 질문을함으로써 동물을 식별하는 어린 시절의 게임에서 비유함으로써 COM의 목적을 알려줍니다.

디자인은 기술과 방법론을 능가합니다. 좋은 디자인은 Oo Language의 특징이 체계화하기 위해 노력하는 것의 중심에있는 Demeter의 법칙과 같은 복잡성 관리의 보편적 원칙을 통합하는 경향이 있습니다.

우수한 디자인은 OO 특정 언어 기능의 사용에 의존하지 않지만 일반적으로 사용하는 것이 가장 좋습니다.

뿐만 아니라 그것은

  • 프로그래밍을 쉽게/의 유지 관리성을 향상시켜준 현재 상황에서 다른 사람들이(그리고 자신)
  • 그것은 이미 수 있도록 쉽게 데이터베이스 CRUD(만들고,업데이트하고,삭제)작업입니다.

당신이 찾을 수 있습니 그것에 대해 더 많은 정보를 찾:-Java:Hibernate -Dot Net:엔터티 Framework

보도 어떻게 LINQ(Visual Studio)을 만들 수 있는 프로그래밍의 삶을 훨씬 더 쉽습니다.

  • 또한,당신은 당신을 시작할 수 있을 사용하여 디자인 패턴을 실생활의 문제를 해결(디자인 패턴에 대한 모든 OO)

아마도 그것도에 재미를 보여주 작은 데모:

  • 말할 필요가 매장 직원,계정 회원에서 책을 텍스트 파일에서도 비슷한 방식으로 이루어집니다.

.PS.나는 시도 쓰고 그에 유사한 방법:)

OO 방법

코드는 전화:io.파일입니다.저장(objectsCollection.ourFunctionForSaving())

클래스 objectsCollection

기능 ourFunctionForSaving()문자열로

문자열 _Objects

   for each _Object in objectsCollection
         Objects &= _Object & "-"
   end for

반 _Objects 마지막 방법

비 OO 방법

나는 생각하지 않는 것이 적 비 oo 코드입니다.그러나 그것의 생각:)

지금

에 OO 방법입니다.위의 클래스는 부모 등 모든 방법의 저장을 위한 책을,직원,회원 계정을...어떻게 우리가 원하는 경우를 변경하는 방법으로 저장하는 텍스트 파일?예를 들어,그것을 만들 compactible 으로 현재 표준(.CVS).

그리고 우리는 추가하고 싶 로드 기능,얼마나 많은 코드에 당신은 당신을 쓸 필요?에 OO-는 방법 당신은 필요한 추가 새 하위 방법할 수 있는 분할 모든 데이터를 매개 변수(이 한 번 발생).

자의 동료 생각해보세요:)

상태와 동작이 잘 정렬되지 않은 도메인에서, 객체 지향은 이들 영역 내에서 전체 의존성 밀도 (즉, 복잡성)를 감소시켜 결과 시스템을 덜 부서지게한다.

이거 때문입니다 본질 객체 지향은 조직적으로 국가와 행동 사이를 전혀 먼지 지화하지 않고 균일하게 "특징"으로 취급한다는 사실에 근거합니다. 객체는 단지 최소화하기 위해 막힌 기능 세트입니다 전반적인 의존.

다른 영역에서는 객체 지향이 최선의 접근법이 아닙니다. 다른 문제에 대한 다른 언어 패러다임이 있습니다. 숙련 된 개발자는 이것을 알고 있으며 도메인에 가장 가까운 언어를 기꺼이 사용하려고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top