2010-11-30 1 views
6

Objective-C는 스몰 토크 스타일의 메시지를 C 프로그래밍 언어에 추가하는 객체 지향 프로그래밍 언어입니다. Smalltalk를 배우는 것이 Lisp을 배우는 것과 같은 방식으로 좋을 수도 있지만 Smalltalk의 개념을 배우는 것이 Smalltalk의 "원점"에서 주어진 Objective-C를 더 완벽하게 이해하는 데 도움이되는지 알고 싶습니다. 이야기". 그렇다면 구체적으로 무엇입니까?Objective-C Programming : C 및/또는 Smalltalk 도움말을 배우시겠습니까?

C 프로그래밍을 이미 알고 있다고 가정하면 스몰 토크에서 무엇을 배울 수 있습니까? C, 즉 메시징, 인터페이스, 프로토콜, 동적 타이핑, 델리 게이션, 리플렉션, 객체 지향의 개념이 아닌 Objective-C에는 많은 개념이 있지만 분명 스몰 토크 (Smalltalk)에서 파생됩니다.

편집 : 일반적인 합의가 C를 학습 (는 목표 - C 프로그래밍에 관해서) 스몰 토크를 배우는 것보다 자신의 시간을보다 효율적으로 사용이 있다는 것이다으로 내가, 질문에 대한 C 프로그래밍 언어를 추가했습니다.

+0

스몰 토크 (Smalltalk)에 대해 잘 모르기 때문에 Objective-C 개발자에게 어느 정도 도움이되는지 여부에 대한 답변을 제공 할 자격이 있다고는 생각하지 않습니다. 즉, 나는 두 가지 언어를 동시에 배우 려하지 않고 객체 지향 프로그래밍 개념에 익숙해지는 것이 도움이 될 것임을 지적하는 것이 가치가 있다고 생각합니다 ** ** –

+1

어떻게 사용하는지 궁금합니다. Obj-C는 Obj-C의 일부이기 때문에 C를 배워야합니다. – Vovanium

답변

6

스몰 토크는 엄청나게 압축 된 언어이며 가장 순수한 객체 지향 언어 중 하나입니다. Objective-C는 스몰 토크와 C 사이의 실용적인 타협점입니다. 예를 들어, 스몰 토크에서 모든 것은 객체입니다 - 심지어 간단한 숫자 - 그리고 객체의 모든 조작은 메시지 전송에 의한 것입니다. 메시지는 이름과 관계없이 동일한 순서로 평가됩니다. 그래서 예. 다음

8 + 9/23 + 16 * 8 

엄격한 왼쪽에서 오른쪽으로 평가되기 때문에 사업자 '+', '/'와 언어가 번호로 전달됩니다 단지 메시지를 인에 특별한 의미가 없다 '*' 사물.

Objective-C는 스몰 토크 스타일의 객체를 C에 추가하지만 C의 기본 유형 및 내장 연산자를 보유하는 C의 엄격한 수퍼 세트이기도합니다. 그래서 Objective-C에서 연산의 정상적인 수학적 순서가 위의 표현에 적용될 것입니다 - 나누기와 곱셈이 먼저 수행되고 이후에 덧셈이 수행됩니다.

학습 C는 Objective-C를 완전히 이해하는 데 절대적으로 필요합니다. Objective-C는 C의 엄격한 상위 집합이며 명시 적으로 동일한 구문과 의미를 사용합니다. 이것은 어떤 연산을 어떻게 적용해야할지 모른 채 포인터를 유지하는 C의 능력 덕분에 객체의 개념을 C에 접목시킵니다. 그런 다음 C 구문을 확장하여 개체에 메시지를 게시하고 개체에서 수신 할 수있는 메시지를 선언하고 구현하는 방법을 제공합니다.

Objective-C 런타임의 일반적인 디자인은 특히 Cocoa와 결합 될 때 선택기의 개념, 클래스의 인스턴스, 계층 구조 및 시스템에 대한 팩터 리로 메타 클래스 사용 등 Smalltalk에서 직접옵니다. 모델 뷰 컨트롤러 (Smalltalk 원본, 거의 유비 쿼터스 임에도 불구하고)와 표준 콜렉션과 객체에 정의 된 많은 메시지의 분할을 말합니다.

내 머리 꼭대기에서 스몰 토크는 흐름 제어 시스템이 크게 다르며 '블록'과 비슷하지만 미묘하게 다른 생각을 가지고 있습니다 (대부분의 최신 구현이이 두 가지를 선으로 가져 왔음에도 불구하고). 애플은 실제로 C 레벨에서 확장 된 블록을 구현했다.이 블록은 Objective-C 객체에 대한 많은 새로운 메소드에 의해 활용된다.

Goldberg Smalltalk-80 서적은 매우 잘 쓰여지고 읽기 쉽고 언어는 매우 간단하므로 2-3 개의 장으로 전체 언어를 배울 수 있습니다. 대부분의 복잡성은 런타임에서 사용할 수있는 객체에 의해 삼켜지며, 분명히 그러한 것들은 전송되지 않습니다. 객체와 런타임에 대한 이데올로기 적 요소는 인쇄물의 특성과 매우 구분됩니다. 반대로 C는 흐름 제어와 산술 같은 것을 언어 기능으로 만든다. 이것은 어떤 일이 일어나고 있는지를 실제로 느끼기 전에 더 많은 구문과 더 많은 읽을 것을 의미한다.

결론적으로 Smalltalk-80 책 (자주색 책)은 분명히 가치가 있으며 매우 유용하지만 꼭 필요한 것은 아닙니다. 학습 C는 어쨌든 필수적입니다. K & R에 대한 내 언급은 비교를위한 것입니다.

+0

합의는 다음과 같다. 스몰 토크는 흥미롭지 만 불필요합니다. –

+2

그것은 절대적으로 잘못되었습니다. 좋은 Objective C를 작성하려면 좋은 스몰 토크와 약간의 C가 필요합니다. –

+2

좋은 Objective-C를 작성하려면 좋은 Objective-C를 배워야합니다. 저는 우리가 말하는 것은 모두 두 개의 선구자의 것이라고 생각합니다. 오직 필요한 것이 C뿐입니다. 당신이 C를 쓸 수있는 Objective-C를 쓸 수 있다면 반드시 스몰 토크를 쓸 수는 없습니다. – Tommy

0

나는 최고의 배경 목적 배울 수 있다고 생각 - C는 C를 알고 있다면, 당신은 쉽게 객체 지향 프로그래밍에 익숙해 질과 목적에 쓸 것이다 C.이다 - C.

개인적으로, 나는 돈 ' 스몰 토크를 배우는 것은 좋은 생각입니다.

+1

아니요. 학습 객체 지향 프로그래밍은 쉽지 않습니다. 컴파일은 객체 지향으로 만드는 것과 다릅니다. –

+1

프로그래밍 스타일을 변경하고 원리를 이해하는 것입니다. 어쩌면 C로 huuuge 경험을 가진 사람을 위해, 정말 힘들지만 나를 위해 그것은 큰 거래가 아니었다 – Knodel

+0

... 지난 10 년 동안 C#, java 및 Delphi에서 본 코드를 살펴볼 때 , 나는 그 언어로 프로그래밍 된 20 가지 정도의 프로그래밍이 객체 지향 프로그래밍을 정확하게 배웠다고 말할 것입니다. * 적용 * it –

2

면책 조항 : 스몰 토크에 대해 알고 있습니다.

당신의 Obj-C 기술은 스몰 토크를 배우는 것으로부터 이익을 얻을 것이라고 확신하지만, 제 생각에는 C를 배우는 데 시간이 많이 걸릴 것이라고 생각합니다. C로 들어가기 전에 Obj-C를 배운 사람으로서, 스몰 토크는 쉽게 이해할 수 있지만 C에서 가져온 개념은 훨씬 어렵습니다.

0

메소드를 호출하는 대신 객체에 메시지를 전달하는 데 익숙해지는 것은 SmallTalk 백그라운드가 없어도 매우 쉽습니다. 그러나 SmallTalk는 C (SuperCollider 변형을 제외하고)와 같이 보이지 않으며 코드 블록 및 기타 미친 물건을 일류 객체로 취급합니다. in SuperCollider {i < 5}.while({ // do stuff })이 동작은 Objective-C로 넘어 가지 않았고 나처럼 당신을 혼란스럽게 할 것입니다.

+1

이제 목표 C에 블록이 있습니다 (매우 추한 것) –

3

I은 ​​단지 예를 이

[someObject라는 메시지] 참조

someObject라는 메시지가 표시 크 뇌델에 동의해야한다.

Objective-C가 동일한 "위치 지정"을 사용하고 있음을 알 수 있습니다. 그렇습니다. 스몰 토크에서옵니다. 스몰 토크 학습은 항상 좋은 투자입니다. 그리고이 영역에서의 의미는 100 % smalltalk입니다. 그 자체가 MetaClass를 가진 Object 나 Class 중 하나에 메시지를 보내십시오.

예 C는 Objective-C의 사용법을 알고 있지만 OO에 익숙해지는 것이 C에 의해 가르쳐지지 않는 것이 좋습니다. C 및 Smalltalk을 사용하면 Objective-C를 더 쉽게 사용할 수 있습니다. 하지만 Objective-C는 클래스 라이브러리에서 나온 "힘"과 같은 언어가 아닙니다. 그래서 그것에 시간을 보내는 것은 반드시 좋은 시간이었습니다.

그리고 C와 스몰 토크가 Objective-C를 최대한 활용할 수 있다는 것을 잘 알고 있어야합니다.

2

예, Objective-C의 목표 부분은 스몰 토크와 매우 유사합니다. Smalltalk을 먼저 배운다면 Objective-C의 개념 중 일부는 더 쉬울 것이고 메시지를 보내는 구문은 충격이 적을 것입니다.그러나 스몰 토크는 Objective-C보다 반드시 배우기가 더 쉽다고 생각하지 않습니다. C가 이미 알고있는 경우가 아니기 때문에 Objective-C를 배울 수도 있습니다.

그렇다면 스몰 토크는 IMO라는 훌륭한 언어이며 그 자체로 배우는 가치가 있습니다.

5

Smalltalk에서 실제 객체 지향 프로그래밍을 배울 수 있습니다. 자바, C# 및 델파이 같은 하이브리드는 그렇게 잘하는 것 같지 않습니다. 10 년 간의 하이브리드 이후, 스몰 토크의 몇 달 후에 코딩 스타일이 크게 향상되었습니다.

iPhone 개발자는 구문 대신 사용 된 라이브러리 및 개념을 디자인하는 데 더 많은 관심이 있습니다. C는 거기서 도움이되지 않을 것입니다. (몇 가지 기본 사항을 이해해야 만합니다.) Objective C 프로그래밍은 스몰 토크 프로그래밍과 훨씬 비슷합니다. 스몰 토크 IDE는 Objective C 코드보다 훨씬 뛰어나며 객체 지향 코드의 작동 방식과 빌드 방법을 훨씬 잘 이해할 수 있도록 도와줍니다. 스몰 토크 (IDE)에서 다른 객체 지향 언어보다 코드를 깨끗하게하고 잘 리팩토링하는 것이 훨씬 쉽습니다. 코코아 라이브러리는 Java 또는 .net과 비교했을 때 매우 잘 설계되었습니다. 그것들은 예를 들어 약간 더 나은 모양으로 보입니다. 스 퀴크 스몰 토크 (Squeak Smalltalk)