Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: Zoroaster - 08 Ocak 2017, 15:02:19

Başlık: Programı geliştirmeye korkuyorum
Gönderen: Zoroaster - 08 Ocak 2017, 15:02:19
Visual programlamayı sistematik öğrenmedim. DOS zamanından kalma alışkanlıkları kullanarak önce VB daha sonra Delphide bir iki deneme yapıp  istediğim kodlamaları yapabildiğimi ve yazdığım kodların çalıştığını görünce
windows program yazımına devam ettim.

Takıldığım durumlarda gerek forumdan gerek googledan yardım alarak ihtiyacım olan kodlan yazıp proje üretebiliyorum.

Fakat şöyle bir sorunum var;

Başlayıp sonuçlandırdığım ve artık bir tool olarak kullanmaya başladığım projeyi zaman içinde yeni fikirler/ihtiyaçlar doğrultusunda daha da geliştiriyorum. Öyleki 2 sene önce bitirdiğim projemi hala geliştirmeye devam ediyorum.
Ancak ilerleyen dönemlerde, binlerce satıra ve karmaşaya ulaşmış proje üzerinde değişiklik yapmaya korkar oluyorum.

Bu tip sıkıntılar yaşamamak adına yürütülen projeyi yenilik yapacağım derken projeyi çalışamaz hale getirme korkusu olmadan geliştirebilmek için sıfırdan projeye başlarken ne önerirsiniz?



Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: malaga - 08 Ocak 2017, 15:14:09
Açıklama satırları en iyi çözüm çünkü ne olursa olsun bir hafta sonra bile yazdığım programa baktığım Zaman burası ne is yapıyordu diye 1 saat düşünüyorum ama açıklama satırları yazdığım programlarda bu enkazlar 5 dakikamı alıyor ama açıklama satırlarınıza yazarken biraz insan üşeniyor ama sonra kazandır digi vakit çok fazla oluyor
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: ByTEK - 08 Ocak 2017, 15:16:50
Aynı sıkıntı bende de oluyor. Ama kendimi açıklama satırlarına vurdum.. Şuanlık tek tesellim açıklama satırları.. Varsa başka bir yöntem bende öğrenmek isterim.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: muhendisbey - 08 Ocak 2017, 15:23:01
Nesne yönelik program yaz. Class olarak programlarını yaz ve class kartı oluştur. Böylece yazdığın classları başka programda da kullanabilirsin. Örneğin seri iletişimi bir class yap, USB Hid'i başka bir class yap. Projende seri iletişim lazım olunca class kartına bak, girdi ne çıktı ne, sonra dahil et. Hem spagetti koddan kurtulursun hem de daha rahat düzenleme imkanın olur.
Kodlarına açıklama yazmalısın tabi bir de.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Zoroaster - 08 Ocak 2017, 15:24:32
Sorunum açıklama satırı değil.

Örneğin fonk1 adında bir fonksiyon yazıyorum. proje çalışıyor bir kaç ay sonra aklıma gelen yeniliği eklemek istediğimde fonk1'in yetersiz kaldığını parametre olarak yeni bir parametre eklemem gerektiğini fonk1 içinde de parametre değerine göre şunu yap şunu yapma gibi eklentiler yazmam gerekiyor.

Bir 5 ay sonra yeni bir eklenti yapacağım zaman o ana kadar tuttuğum değişkenlerin structure olması zorunluluğu doğuyor ve radikal bir kararla değişkenleri structure yapıp daha sonra da bunları array yapıyorum.  Bir sonraki geliştirmede fonk1'e yeni bir parametre eklemem gerekiyor vs vs.

Aslında projeyi bir ara durdurup sıfırdan yazmaya başlamak belki daha iyi olacak.

Bu tip yamalar öyle riskli ki bir anda proje çok rahatlıkla çalışmaz hale gelebilir.

Daha projeye yeni başlarken temeli sağlam atmak gerekiyor işte bu konu üzerine konuşalım istiyorum.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Zoroaster - 08 Ocak 2017, 15:30:01
Ucu açık geliştirilmeye müsait projelere başlarken nelere dikkat etmeliyiz?
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: OG - 08 Ocak 2017, 15:31:23
Programı MODUL'lere bölmek.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: serdararikan - 08 Ocak 2017, 17:46:05
@muhendisbey e katiliyorum. Sorunun en iyi çözümü nesne tabanlı programlama
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: muhittin_kaplan - 08 Ocak 2017, 17:47:25
oop olmak, aciklama, versiyon kontrol.

Ben genelde oop olamiyorum.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Teğmen - 09 Ocak 2017, 10:48:08
Merhaba
Benim fikrim ;
1.Açıklama satırlarına çok önem göstermek.(Sadece şu şu değişkeni atadık veya şöyle olunca buna tıklanır gibi değil.Güncelleme yapılırsa global değişken olduğunu unutma tarzında;)
2.Programı sınıflar halinde veya modüllere bölmek.
3.Versiyon kontrol (Karışsa bile bir önceki durumu kurtarıp devam edebilirsiniz.)
4.Ucu açık da olsa projenin nerelere varacağı uzun süre düşünülüp ona uygun bir yazılım geliştirilmelidir.
5.En önemliside düşünülen projeye uygun ve gelişime uyum sağlayacak algoritmadır.


Yapılacak işi programa dökmek bir şekilde halledilir.Foruma yazılır,araştırma yapılır,kitaba bakılır v.s. Ama en önemlisi ALGORİTMA TASARIMIDIR.


Bu 5 maddeyi sağlam bir zeminde birleştirebilirseniz  mükemmel ve güncellenebilir projeler ortaya çıkacağına inanıyorum.


Kolay Gelsin.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Zoroaster - 09 Ocak 2017, 12:00:36
Alıntı Yap2.Programı sınıflar halinde veya modüllere bölmek.

O zaman benim yapmadığım kısım bu.

Bunu biraz açabilir miyiz?

STCubeMX tarzında bir program yazdım. Farkı sadece STM32F103C8 için işe yarıyor.

Ekrana çipin görüntüsü geliyor. Her bir bacağa tıklayarak ya da çevre birimleri kutucukları tıklanarak çipin init işlemleri çevre birimi kodları otomatik olarak oluşturuluyor.

Nesne tabanlı yazılımla bu projeyi yeni baştan ele alarak çipi bir nesne bacaklarının her birini gene bir nesne olarak tanımlayacağım.

Fakat dos üzerinde çalışan kodlara alışık olduğum için tavsiye ettiğiniz yapıda kod yazabilir miyim yoksa yazıyorum da haberim mi yok bilmiyorum.

Mümkünse bu konuyu biraz ele alabilir miyiz?

Sınıflar ve modüllerle ne demek istiyorsunuz?



Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Teğmen - 09 Ocak 2017, 12:58:53
Merhaba
Sınıf ve modülden kastım şu; Programı belli parçacıklar ve bu parçacıkların birbiriyle bağlantılarını yalıtarak yapmaktır.

Yani atıyorum;
Buton işlemleri
Ekran işlemleri
Çıktı işlemleri gibi...

Dediğiniz projeyi biraz daha açarsanız iyi olabilir.Anladığım kadarıyla Pin uçlarını gösterecek ve bunlara tıkladığımızda o pine ait kodun yazılmasını  istiyorsunuz...?
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Zoroaster - 09 Ocak 2017, 13:15:23
Zamanında programımın bir videosunu çekmiştim.

Programı geliştiriyorum fakat her an için patlayacak diye korkmaya başladım.

https://www.youtube.com/watch?v=KQ6r5LxJ46w

Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Yuunus - 09 Ocak 2017, 13:34:44
Programi dll lere bolup ihtiyaciniz olan kismi cagirip onun ustunde calisabilirsiniz. Hem moduler olur, degisiklik yapmadiginiz bolumleri tekrar tekrar her deferinde derlemezsiniz, ortalik arap sacina donmez.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: MrDarK - 09 Ocak 2017, 14:39:02
@Zoroaster  hocam;

Konuyu saptırmak istemem lakin sanal ortamda gördüğüm bir gif aynı bu dediğiniz senaryoyu anlatıyor;
http://skillprogramming.com/top-rated/when-change-some-codes-on-project-477

Yani bu sadece sizin yaşadğınız veya hissettiğiniz bir durum değil. Kodu her daim modüllere, fonksiyonlara bölmek #ifdef lerle komutlar yazmak yardımcı olabilir.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: muhittin_kaplan - 09 Ocak 2017, 14:51:49
o zaman sorayım doxygen nedir ?
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: boreas - 10 Ocak 2017, 00:29:22
program yazma standartları var degişken nasıl tanımlanır prosedur baslıkları nasıl olmalı bu standartlara uyunca ileriye donuk kod karmaşası azalıyor. Dunit gibi test kitaplıkları var ama sahsen  bunları hiç kullanmadım. sadece prf. olarak yazanların kullandıgını bılıyorum. sızın kı gb projelerde ıse moduler yapmak en ıyısı. hatta bır addon mantıgıyla bıle yapılabılır. ana yazılım motor gorevı gorur eklentıler eklenerek yazılım gelısır
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: mert3162 - 10 Ocak 2017, 03:16:40
En sıkıntı çektiğim konulardan biriydi bende class yapısını kullanıyorum.Ayrıca belli fonksiyonları bir araya toplayıp yapılması gereken prosedürleri bir standart haline getirdim ayrıca tanımlamalar çok çok önemli bazen bir önceki gün yazdığım kodu bile hatırlayamayabiliyorum ben bunu niye yazmışım diye.

Benim merak ettiğim konulardan biride Bilgisayar programcılığı yada Bilgisayar mühendisliği okuyan arkadaşlara bu eğitimler veriliyormu yazdığınız kodu dökümante etmek stabil kod yazmak ile ilgili eğer böyle bir ders veriliyorsa dersin adını merak ettim.Kurumsal seviyede bu tarz eğitim veren yerler biliyorsanız söylerseniz faydalanmaya çalışalım(Çalıştığım şirketin eğitim bütçesi var belki böyle bir konu ile değerlendirebiliriz.)
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: OG - 10 Ocak 2017, 03:35:39
Faydalı ufak tefek bilgiler
https://we.tl/7VsnDuJlp6
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: ISS - 10 Ocak 2017, 12:20:36
- object oriented analysis & design
- yazılım geliştirme metodolojileri
- 'clean code'
- 'documentation'
- yazılım mühendisliği ilkeleri
- veri yapıları - algoritmalar
- yazlım analizi
- tasarım desenleri

yukarda birkaç tane anahtar yöntem söyledim. bunları araştırın gerekirse kitap alın youtube video izleyin. zamanla gelişirsiniz.
tabi zamanla hepsini öğrenmek gerek. tek bir tanesi her sorunu çözmez.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Zoroaster - 10 Ocak 2017, 18:45:08
Alıntı yapılan: boreas - 10 Ocak 2017, 18:20:41
Anladığım kadarıyla esas sorun diğer konu başlığınızda ki büyük programların geliştirilmesiyle ilgili. Bu bir yapı işinize yarayadabilir yaramayadabilir. Sizin durumda öncelik programın nasıl bir yapısı olduğu nasıl büyüdüğü ? Şöyleki bir yazılım yaparsınız hesap makinesi, not defteri vs. gibi programlar eklendikçe yazılım büyür başka bir yazılım yaparsınız misal simülasyon yazılımı motor kısmı sabit kalır simüle edilecek entegreler eklendikçe yazılım büyür. Bu iki büyüme şekli birbirinden farklıdır. Bu yüzden doğru karar için programın özelliklerini detaylı bilmek gerekir.

Hocam 2 tipte de büyüyor.

Mesela ilk duruma örnek olarak;

Timer, ADC, USART gibi çevre birimlerinin kullanımı ile ilgili kodları sırası geldikçe programa ilave ediyorum. Mesela SPI ile ilgili kodları yazdım. Timer ile ilgili kodları yazılmasına neden olacak seçenek şu anda aktif değil.

İkinci duruma örnek olarak;

Şu anki programım sadece STM32F103C8 için geçerli. Mesela bu programa bir ikinci çipi eklemek istersem işler çok karışır. Bu durumu programa başlarken hiç öngörmediğim için mevcut yazılımı yeni baştan yazmam gerekir.

48 bacaklı çipi Delphinin mevcut panel komponentleri ile tasarım aşamasında çizdim. Yeni ekleyeceğim çip 48 değil 64 bacaklı olabilir. En basitinden çipin çizimini tasarım aşamasında değil run aşamasında koda yaptırmam gerekir.

Çipin bacak sayısının değişmiş olması ana çatıyı da değiştirmemi gerektirir.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: boreas - 11 Ocak 2017, 12:15:48
@Zoroaster  işte oop tam olarak burada devreye giriyor.  Esasen sizin programınız sadece timer - adc - spi olarak büyümesi gerekir. Diğer entegreler temelde hepsi aynı bacak sayıları değişir, bacakların yapıları değişir ve bazı kısıtlamalar olabilir.
Bu programı şöyle tasarlamalısınız her entegre bir dosyadan oluşacak kaç bacağının olduğu ve bacakların adc mi , vdd mi ne özellikte olduğunu yazan bir text dosyası olarak sisteme eklenecek belki bir metin olarakda sınırlamalar ya da kurallar eklenecek.
Delphi bu metni açtığında bakacak 48 bacak var size bir panel oluşturacak 4 tarafına 12 bacak yerleştirecek bacakların özelliklerinide yine textten alacak. 64 oldğunda yine aynı şekil.
Bunun içinde sizin entegre sınıfını tanımlamanız bundan da önce bacak yapısını tanımlamanız gerekir.
misal
class Tbacak
pin:tpanel;
ozellik:array of string;
end ;

class entegre
isim:string;
bacak_sayisi:integer;
bacaklar: array of tbacak;
end;

gibi .
sistemi böyle kurduğunuzda entegreler çalışma anında oluşur programlamanız kolaylaşır ve hata oranınız düşer. Tekrarlı işlemler için tek tek kod yazmasınız. 100'lerce işlemcide olsa program canavar gibi çalışır.

OOP.nin amacıda tam olarak budur.
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: Zoroaster - 11 Ocak 2017, 12:23:40
Delphide class tanımı yaparak hiç kod yazmamıştım.

Record tanımına benziyor ve programımda bolca Record tanımlı değişkenlerden yararlanmıştım..

Diğer başlıkta ( https://www.picproje.org/index.php/topic,68288.0.html ) konu açmıştım ama burada da sorayım class ile record un ne farkı var?
Başlık: Ynt: Programı geliştirmeye korkuyorum
Gönderen: boreas - 11 Ocak 2017, 12:38:59
Record tanımladığın zaman o değişkenlere ait hafızada yer açılır. ve direk değişken atamaya başlarsın. Class tanımladığında herhangi birşey oluşmaz o sadece bir tanımdır ve classda ek olarak yaratılma esnasında (create) ya da mouse panelin üzerine gelince ne yapsın gibi olayları bu class tanımına işleyebilirsin. Ama bunlar dediğim gibi hala tanım olarak geçer. ne zaman ki ;
var
entegre : Tentegre;
begin
entegre := tentegre.create;
end;
dediğin anda artık bir obje olarak oluşur ve hafızadan yer alır ve avantajı şudur. tbacak yapısı esasen tpanel yapısına ek özellikler katılarak oluşmuştur. ve bir kez oluşturdukdan sonra binlercede kullansan çok kolay bir şekilde oluşturur kullanırsın. Diğer bir avantajda şimdi yazmış olduğun programdaki bütün panellere bir özellik eklemek istediğini düşün mesela rengini değiştireceksin bunu bütün panellerde tek tek yapman lazım bunun yerine bacak sınıfında rengi değiştirirsen zaten bacak kullanan büyün yapılar otomatik olarak değişir.

Bir yapılabilir iş daha panel sınıfından bileşen oluşturup başka uygulamalarda da direk component gibi kullanabilirsin. Ama bu daha çok uğraştırır fakat ileriye dönük temiz bir iş olur.