2012-03-23 3 views
2

필자는 중간급 프로그래머로서 Delphi 프로그래밍에 관한 한 내 게임을 들어 올리는 것에 관심이 있습니다. 전문가의 말을 들어야합니다.Delphi 2010의 고급 프로그래밍을위한 필수 기술은 무엇입니까?

Delphi 2010을 사용하여 Win32 응용 프로그램 프로젝트를 수행하려고 할 때, 필자가 능숙해야 할 필수 기술은 무엇입니까? (TOC가 너무 짧지도 않고 철저하지도 않은 항목 목록을 고맙게 생각합니다. 책)? 웹 서비스를 사용하여 별도의 데이터베이스에서 읽고 쓰고 다른 시스템 구성 요소와 통신하는 것으로 가정 할 수 있습니다. 내가 알고있는대로 유니 코드 준수는 생략하십시오. 또한 델파이를 사용하는 "모범 사례"프로그래밍을 위해 인터넷에 좋은 자료가 있습니까? 아니면 항상 "당신이하려는 일에 달려 있습니다"(즉, 여기에 개별 질문을하십시오)의 경우입니까? 감사.

+0

이 질문은 추측과 확장 대화를 요구하며 FAQ와 실제로 일치하지 않습니다. 나는 그런 질문을하는 팬 이었지만, FAQ 작성 커뮤니티가 옳다는 것을 깨닫게되었다. 이 질문들은 여기에 적합하지 않습니다. Embarcadero 포럼에 적합합니다. 이것은 프로그래밍 주제가 아닌 토론 주제입니다. 나의 짧은 대답 : 정말로 똑똑하고, 정말로 정말로 끈기가 있어야합니다. –

+0

나는 이것을 엠바 카데로 포럼에 올렸지 만, 나는 그 포럼에 참여하는 사람들의 견해에 국한했을 것입니다. 나는 프로그래밍 공동체의 더 대표적인 견본으로 그렇게 생각한다. 이 질문은 '추측'이나 '대화의 연장'을 요구하지 않으며, '전문가'라는 자신을 편안하게 생각하는 사람들로부터 조언을 구하는 것일뿐입니다 (완벽한 예를 들어 알 노드의 대답 참조). 어쨌든, 그 질문은 당신이 결정에 직면했을 때 이미 답변을 받았지만 받아 들였습니다. 그러나 당신은 관료주의에 합류하는 것을 막을 수 없었습니다 :-) – Sam

+0

10 개의 상행위가 있다면, 나는 투표하지 않았을 것입니다. 닫기. 그래서 저는 0을 "양면 가치"로 받아들입니다 (지난 12 시간 동안). 1 년 전, 우리는 그것을 Programmers.SE로 옮겼습니다. Fu의 FuzzyWuzzy 버전입니다. 그러나 요즘 그들은 이런 종류의 질문을 저쪽에 닫습니다. 형식에 맞지 않습니다. –

답변

5

첫 번째 조언은 RTL/VCL 코드의 일부를 읽는 것입니다. Classes.pas SysUtils.pas Graphics.pas Controls.pas ... 델파이로 코딩 할 때 참조와 같습니다. 코드의 다른 부분 (SOAP 또는 FireMonkey와 같은)은 아마도 다음과 같은 좋은 참고 자료가 아닙니다. 소스를 사용하십시오, Luke!

어떤 주제, 델파이 프로그래밍 아마도 특정하지,하지만 내 팀의 실험 및 프로젝트 코드를 유지 보수 건너 들어온 : 거기에는 가비지 컬렉터가 없지만, 모든 클래스의 인스턴스가하여야한다 : 델파이가 메모리를 처리하는 방법

  • 해방되거나 주인이있다 (TComponent 어린이);
  • 예외를 처리하는 것을 잊지 마십시오. 발생할 수있는 상황을 생각한 다음 try .. finallytry .. except 블록 (리소스/메모리 + 오류 처리)을 사용하여 코드를 보호하십시오.
  • Delphi 2009 이전 코드가있는 경우 문자열 유형이 Ansi에서 Unicode로 변경되었음을 알아 두십시오. 인터넷을 통한 일부 코드는 Delphi 2010에서 준비되지 않았습니다.
  • 단위 테스트에 대해 자세히 알아보고 사용하십시오.
  • n 계층 아키텍처에 대해 자세히 알아보고 Delphi RAD 접근법 (클릭하기 쉽고 코드가 있지만 GUI, DB 및 논리가 혼합되어 있으면 유지 보수가 어려움)을 악용하지 마십시오. 진정한 OOP 코딩은 심각한 프로젝트에 필수입니다. .
+0

+1, * Luke! * :-) 소스를 사용하십시오. – TLama

+0

VCL을 학습에 사용하는 것이 옳습니다. 여기에는 훌륭한 코드가 많이 포함되어 있으며, 그다지 좋지 않은 코드도 좋은 예가 될 수 있습니다. VCL을 사용하는 동안 발생하는 문제는 더 나은 구현 방법을 안내합니다. 이러한 문제를 감지하고 더 나은 솔루션을 제시 할 수 있다면 분명히 뭔가를 배웠을 것입니다. :) – GolezTrol

+0

+1 mercie beaucoup, 무슈. :-) – Sam

4

'당신이하려는 일'의 경우는 아닙니다. ;)

고급 프로그래밍이 특정 지식과 관련이 있다고 생각하지 않지만 문제를 포착하고 필요에 맞게 확장 가능한 창의적인 솔루션을 제시하는 데 올바른 사고 방식을 사용한다고 생각합니다. 당연히 당신은 지식을 필요로 할 때 그것을 구축 할 수 있어야합니다. 적어도 프로그래밍 기술을 습득하는 것보다 큰 그림을 보는 것보다 (고급) 프로그래머가되는 것이 좋습니다.

+0

+1 귀하의 철학에 동의합니다 – Sam

1

인터페이스 사용!

자유롭게 할 필요가 없으므로 더 안전한 단순한 개체이므로 컴파일러는 참조 횟수를 사용하여 정렬합니다.

그들은 (인터페이스에와 클래스 섹션에서) 두 번 같은 방법을 입력하는 단점이 있지만,이 또한 구현 섹션 내부의 클래스 정의 숨길 수 있습니다 : 그,

interface 

type 
    IJob = interface(IInterface) 
    ['{A925F829-60D6-4418-B03A-1655B311D8D9}'] 
    procedure DoSomething; 
    end; 

function CreateJob: IJob; 

implementation 

type 
    TJob = class(TInterfacedObject, IJob) 
    public 
    procedure DoSomething; 
    end; 

function CreateJob: IJob; 
begin 
    Result := TJob.Create; 
end; 

{ TJob } 

procedure TJob.DoSomething; 
begin 
    // do something 
end; 

공지 사항 이 코드에는 'Free'가 없지만 완전히 유효합니다.

+1

인터페이스를 구현하는 모든 객체가 자동으로 해제되는 것은 아닙니다! 그럼에도 불구하고, 인터페이스를 사용하는 것은 많은 상황에서 큰 도움이됩니다. 그 중 하나는 관찰자가 주어진 인터페이스를 구현하는 한 모든 클래스가 될 수있는 관찰자 패턴을 구현하는 것입니다. – GolezTrol

+0

특정 기능을 사용하는 것은 엉망진창을 만드는 동안 전문 용어를 사용하는 훌륭한 방법입니다. –

+0

"인터페이스 사용!" 나는 인터페이스를 배우고 사용하는 것을 의미합니다. 나는 인터페이스의 유무에 관계없이 엉망진창을 만드는 것이 쉽지는 않다. 그것은 개발자의 책임입니다. – hubalu

관련 문제