free ve destroy metodları

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

procedure TForm1.Button2Click(Sender: TObject);
var
nesne:THede;
begin
nesne :=THede.Create;
nesne.Free;
nesne := nil;
nesne.Free;
//bu free uzayda mi durmaktadir ? nesnenin bir metodu degil midir
//ama nesne yok edilmistir...
end;
Free nasıl mı çağrılıyor. Bir kaç dneme yapalım

Kod: Tümünü seç

Var
 Hedeo:TEdit;
begin
 Hedeo.Free;
Hedeo hiç yaratılmadı. Örneği yok ama bu çağrıda çalışıyor. Yalnız form görünmez oluyor.
Bide şunu deneyelim.

Kod: Tümünü seç

 Hedeo.Destroy;
Bu hata verdi. Yemiyor.

akıma class function lar geldi. Sınıf fonksiyonlarıda var ve bunlar sınıf örneği olmadan çalışabiliyorlar. TObject in kodunu inceledim. Free tanımına baktım. class function değil. Ama Free için önemli nokta TObject te yani Delphi nin kalbinde bulunması. Şimdi can alıcı deneme;

Kod: Tümünü seç

 Hedeo.CleanupInstance;
Hedeo nun yine örneği yok hiç yaratılmadı buda sorunuz çalışıyor. CleanupInstance fonksiyonuda TObject te tanımlanmış. TObject te Borland gizli işler çevirmiş. Biz ne yapmışlar bilemiyoruz. Ama keramet orda.


burayi tam olarak anlayamadim galiba. Yukaridaki kodda Create metodunda ortaya cikacak bir hata sonucu Hede.Free; satırı çalışır mı ?
THede.Create cagrisi try - finally blogu arasinda değil ki !
Bildiğim kadarıyla kodun try finally arasında olmsı gerekmeyebiliyor. Okuduğum yazılarda söylenen şu. Eğer bir istisna olursa delphi içten dışa bir exception handler arar. Bulduğunu işletir. Sanırım burdada en yakın olarak kod dışındada olsa bu kısmı buluyor. Tabi bu tahmin.



Evet javanın temelinin de eskilere dayandığını, daha doğrusu yeni nesil dil olarak nitelendirilmemesi gerektiğini vs..
Aaaa bilmiyorum. Java yeni nesil değil ise yeni nesil dil hangisidir. Bir kaç alıntı.
Computer Language and OOP History
1957 Fortran by John Backus (IBM): Still favorite language of physicists.
1959 Lisp (LISt Processing) introduced by McCarthy: First to use recursion, first-class functions, garbage collection. Intended for AI.
1960 Cobol (Common Business Oriented Language).
1960 Algol (ALGOrithmic Language): Block structure, data types, BNF notation.
1964 Basic by Kemeny and Kurtz.
1967 Simula: Introduced classes, coroutines, instancing (data abstraction).
1971 Pascal from Niklaus Wirth: Intended as stepping-stone to learn Algo and Fortran.
1972 C from Dennis Ritchie: Born out of Pascal, B and BCPL. Built for Unix, fast and low-level.
1972 Prolog: Logic, rule-based language (predicate calculus), used in AI.
1975 Scheme by Guy Steele and Gerald Sussman: simplified Lisp.
1979 Common LISP Object System
1980 (1970 to 1983) Smalltalk by Alan Kay: Pure OO language (partly based on Simula).
1983 Objective C
1984 Ada commissioned by the U.S. Department of Defence: For real-time systems, e.g., used for controlers in air-planes.
1986 (1991 release 3.0) C++ started by Bjarne Stroustroup: Speed of C with OO features, includes templates and multiple inheritance.
1987 Actor, Eiffel by Bertrand Meyer: Intended to be OO and multi-platform. Based on ideas of C++.
1996 Java by James Gosling (at SUN Micro Systems): Uses a virtual machine, almost all features of C++.
1987 Perl by Larry Wall: Scripting Language, combines C, awk, sed, sh, and BASIC.
1991 Python by Van Rossum.
1995 PHP (PHP Hypertext Preprocessor) by Rasmus Lerdorf.
1995 Ruby by Yukihiro Matsumoto: High-level OO scripting languages.
1995 Lingo by John Thompson: Scripting language for Windows, used by Director. Written for non-programmers.
2001 (2004 version 2.0) ActionScript by Macromedia: Introduced with Flash, reminds of JavaScript
Ve SUN demiş ki.
January 15, 1991
"Stealth Project" (as named by Scott McNealy) brainstorming meeting in Aspen with Bill Joy, Andy Bechtolsheim, Wayne Rosing, Mike Sheridan, James Gosling and Patrick Naughton.

February 1, 1991
Gosling, Sheridan, and Naughton begin work in earnest. Naughton focuses on "Aspen" graphics system, Gosling on programming language ideas, Sheridan on business development.

June 1991
Gosling starts working on the "Oak" interpreter, which, several years later (following a trademark search), is renamed "Java."

August 19, 1991
Green team demonstrates basic user interface ideas and graphics system to Sun co-founders Scott McNealy and Bill Joy.

Summer 1992
Massive amounts of hacking on Oak, and related components.

October 1, 1992
Wayne Rosing joins from SunLabs (which had formed in July 1990) and assumes management of the team.

March 15, 1993
The development team, now incorporated as FirstPerson, focuses on interactive television after learning about Time Warner's RFP for its interactive cable TV trial in Orlando, FL.

April, 1993
NCSA Mosaic 1.0, the first graphical browser for the Internet, is released.

June 14, 1993
Time Warner goes with SGI for its interactive cable TV trial, despite acknowledged superiority of Sun technology and assurances in mid-April that Sun won the deal.

Summer, 1993
Naughton flies 300,000 miles selling Oak to anyone involved in consumer electronics and interactive television; meanwhile, the rate at which people are gaining access to the Internet reaches breakneck speed.

August, 1993
After months of promising negotiations with 3DO to provide set-top box OS, 3DO president Trip Hawkins offers to buy the technology outright. McNealy refuses, and deal falls through.

September, 1993
Arthur Van Hoff joins team, originally to do application development environment aimed at interactive television; ends up doing mostly language design.

February 17, 1994
Alternative FirstPerson business plan for doing CD-ROM/online multimedia platform based on Oak presented to Sun executives to very mixed reviews.

April 25, 1994
Sun Interactive created, half of FirstPerson employees leave to join it.

June, 1994
"Liveoak" project started. Designed by Bill Joy to use Oak for a big small operating system project.

July, 1994
Naughton reduces the "Liveoak" project's scope to simply retargeting Oak at the Internet after writing a throwaway implementation of a Web browser in a long weekend hack.

September 16, 1994
Jonathon Payne and Naughton start writing "WebRunner," a Mosaic-like browser later renamed "HotJava"

September 29, 1994
HotJava prototype is first demonstrated to Sun executives.

Autumn, 1994
Van Hoff implements Java compiler in Java. (Gosling had previously implemented it in C.)

May 23, 1995
Sun formally announces Java and HotJava at SunWorld '95.
.
.
.
Kusura bamayın uzun bir alıntı oldu.
Birde şu adrese bakmanızı tavsiye ederim tarihçe flash animasyonu ile anlatılmış.
http://www.java.com/en/javahistory/

Sun ın kendisi Java tarihin en fazla 91 e kadar götürmüş. Ki o java nın ne kadar Java olduğu tartışılır. OOP daha eski bir kavram olsa gerek. Java nın duyurusunu hatırlıyorum. O yıllarda Bil. Prog. talebesiydim. Ama OOP bana tarih kadar eski geliyor :) (1967 Simula: Introduced classes, coroutines, instancing (data abstraction). Bu yılları hatırlayamıyorum :). O sıralar Elvan gazoz varmıydı ya.)

Kolay gelsin
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

İyi de ben javadan önce OOP yoktu demedim ki :!: Pascal da bile vardı dedim zaten, bundan ne anlıyorsun?Hala diyorum ki, Delphi tam olarak OOP değil ve java da yeni nesil bir dil değil :idea: Elvan diye sabun da vardı onu da mı hatırlamıyorsun ?
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Re: free ve destroy metodları

Mesaj gönderen fduman »

sadettinpolat yazdı:
coderlord yazdı:

Kod: Tümünü seç

Hede:= THede.Create;   <-- Burada exception oluşursa?
try

finally
  Hede.Free;  <-- Hede yaratıldı mı ki?
end; 

burayi tam olarak anlayamadim galiba. Yukaridaki kodda Create metodunda ortaya cikacak bir hata sonucu Hede.Free; satırı çalışır mı ?
THede.Create cagrisi try - finally blogu arasinda değil ki !
sadettin zaten çalışmasın diye o şekilde yazdım. Create çağrısında exception oluşursa Free 'yi çağırmanın bir manası var mı? Doğru kullanım bu şekilde olmalıdır.

Şimdi hatalı kullanım örneğini görelim.

Kod: Tümünü seç

try
  Hede:= THede.Create;   <-- Burada exception oluşursa?
finally
  Hede.Free;  <-- Hede yaratıldı mı ki?
end; 
Burada Create çağrısında bir hata oluştuysa object instance yaratılmamasına karşın biz yine de Free yi çalıştırıyoruz. Optimize bir yöntem olmuyor. Çünkü biliyoruz ki yaratılmazsa Free ye de gerek yok zaten.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: free ve destroy metodları

Mesaj gönderen sadettinpolat »

coderlord yazdı: Şimdi hatalı kullanım örneğini görelim.

Kod: Tümünü seç

try
  Hede:= THede.Create;   <-- Burada exception oluşursa?
finally
  Hede.Free;  <-- Hede yaratıldı mı ki?
end; 
Burada Create çağrısında bir hata oluştuysa object instance yaratılmamasına karşın biz yine de Free yi çalıştırıyoruz. Optimize bir yöntem olmuyor. Çünkü biliyoruz ki yaratılmazsa Free ye de gerek yok zaten.
senaryo ustune senaryo yaziyoruz :)

diyelimki nesnenin create olayinda 3 tane nesne create ediyoruz. ilk 2 nesne basarili bir sekilde create edildi ama 3. nesne cretae edilirken bir hata olustu. bu durumda daha onceki 2 nesne hafizada yer sgal edecek. aklima gelen ilk cozum nesnenin create metounda da bir try - except blogu yerlestirmek. ne kadar dogru bir mantik olur bilemiyorum.

Kod: Tümünü seç

Thede.Create

a:=TA.Create;

try
 b:=TB.Create;
except
 a.free;
 a:=nil;
end;

try
 c:=TC.Create;
except
 a.free;
 a:=nil;
 b.free;
 b:=nil
end;
end;
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla