Yazılım Mühendİslİğİ ve Günümüz PHP Programcılığı



Benzer belgeler
Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

MySqlConnection connection; MySqlCommand command; MySqlDataReader reader; MySqlDataAdapter adapter; DataTable table;

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

PHP CodeIgniter MVC Framework

Özgür Yazılımlarla Web Programlama. Özlem Özgöbek

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

«BM364» Veritabanı Uygulamaları

İlk Konsol Uygulamamız 2 İlk Windows Uygulamamız 9.Net Framework Yapısı 18 Neler Öğrendik 19. Veri Tipleri 24 Tanımlı Veri Tipleri 27 Basit Tipler 28

.com. Özcan Acar 2009 Kurumsal Java.com

Bölüm 10: PHP ile Veritabanı Uygulamaları

Özcan Acar 2010 Kurumsal Java Akademisi.com

Yazılım Kodlama ve İ simlendirme Standartları v1.0

Web Uygulamaları Mimarileri ve Güvenliği

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

JavaServerFaces. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Ç NDEK LER G R fi 1 Bafllamadan Önce 1 Kitab Kimler Okumal? 1 Kitap çerisindeki Örnekler 2 Örneklerin Kullan m 3 Çekinmeden Yaz n 7

Client Server Database

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Turquaz. Açık kodlu muhasebe yazılımı Turquaz Proje Grubu

Her Yönüyle SQL Enjeksiyonu. OWASP-Türkiye Bünyamin Demir

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

ORT3167 İnternet Programcılığı 1 Ders1-2. Öğr. Grv. Aybike ŞİMŞEK

İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır.

Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi

Dicle Üniversitesi Bilgi İşlem Online Talep Takip Sistemi

PHP+Memory Cache+PostgreSQL Kullanarak Performanslı Veritabanı Uygulaması Geliştirme

Symfony Doctrine. Symfony-Doctrine. Deniz Bahadr GÜR, Mehmet Onur YALAZI. Özgür Web Teknolojileri Günleri, 2010

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN

Web Uygulama Anaçatıları. Tahir Emre KALAYCI. May 5, 2009

Nesne Yönelimli Programlama

CODEIGNITER SEMINERI KÜTÜPHANE YAZMA GÜVENLIK ÖNLEMLERI CODEIGNITER 2.0

Java EE 5 Teknolojileri Jboss Seam

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

Rahman USTA Editör Altuğ B. ALTINTAŞ Papatya Yayıncılık Eğitim

Python Web 2.0 Python ve Web 2.0 Son. Python ve Web 2.0. Gökmen GÖKSEL, 3 Mayıs 2007

Şişli Mesleki ve Teknik Anadolu Lisesi Web Programcılığı Dalı 2014 WEB PROGRAMCILIĞI DALI

Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür.

WEB PROGRAMMING Ders İzlence Formu. Kodu: CSE300 Dersin Adı: WEB PROGRAMMING Toplam Saat İngilizce Zorunlu Derse Kabul Koşulları:

Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 203 Veri Yapıları ve Algoritmalar I

BİL-141 Bilgisayar Programlama I (Java)

ORM & Hibernate. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu

Swing ve JDBC ile Database Erişimi

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

PHP Günleri 2013#1. mysql_* Fonksiyonları Ömrünü Doldurmak Üzere. Peki Şimdi Ne Olacak? Özgür Yazılım A.Ş.

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

Programlama Dillerinde Kullanılan Veri Tipleri

İNÖNÜ ÜNİVERSİTESİ MALATYA MESLEK YÜKSEKOKULU DERS TANITIM FORMU. Kredisi AKTS Eğitim Dili Tipi: Zorunlu/ Saat

Ç NDEK LER 1 PHP 6 1 PHP Nedir? 1 PHP nin Tarihi 2 PHP nin Avantajlar 4 PHP nin Dezavantajlar 4 PHP nin Çal flma Mant 6 PHP nin Çal flma Aral 8 PHP

1 FULL STACK DEVELOPMENT NEDIR? 1 Nasıl Full Stack Developer Olurum? 2

Dağıtık Sistemler CS5001

İÇİNDEKİLER VII İÇİNDEKİLER

Gönderilen uygulama incelendiğinde, belirtilen gerekliliklerin bir kısmının karşılandığı görülmüştür.

BİL132 Bilgisayar Programlama II

1 / 5. Mehmet Alper Şen. Kıdemli Yazılım Uzmanı. İletişim Bilgileri

MVP, Observer ve Mediator Örüntüleri ile Yeniden Kullanılabilir Uygulama Bileşenleri Geliştirme

YZM 3215 İleri Web Programlama

Mantıksal (Logic) Operatörler

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

CENG 302 Yazılım Mühendisliği Yazılım Mimarisi - Devam. Alper UĞUR

Java ile Tasarım Prensipleri ve Tasarım Örüntüleri

Veritabanı. Ders 2 VERİTABANI

Java Kodunuzun Nesne-Merkezli Olmadığının 10 İşareti

Spring Framework Eğitimi

çindekiler 01. Kurulum

YZM 2116 Veri Yapıları

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

İNÖNÜ ÜNİVERSİTESİ MALATYA MESLEK YÜKSEKOKULU DERS TANITIM FORMU. Kredisi AKTS Eğitim Dili Tipi: Zorunlu/ Saat

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ

3. Yarıyıl Ders Planı Kodu Ders Z/S Dil T+U Saat Kredi AKTS BBP 209

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

ANKARA ÜNİVERSİTESİ ELMADAĞ MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI PROGRAMI DERS İÇERİKLERİ

İNTERNET PROGRAMCILIĞI - II

Kurulum 14 FTP ye Bağlanmak ve Dosyaları Atmak 14 Veritabanı Oluşturulması ve Bağlanıp Kurulumun Tamamlanması 15

YZM 2116 Veri Yapıları

Epay, Turkcell MobilÖdeme Altyaps

BİLGİSAYAR VE AĞ GÜVENLİĞİ ÖĞR. GÖR. MUSTAFA ÇETİNKAYA DERS 2 > AĞ VE UYGULAMA GÜVENLİĞİ

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

ÖZGÜR YAZILIMLAR İLE J2EE

JBoss Seam. Melih Sakarya

MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI

Bölüm1. İlk Bilgiler ISBN

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

İZMİR KÂTİP ÇELEBİ ÜNİVERSİTESİ SÖZLEŞMELİ BİLİŞİM PERSONELİ SINAVINA BAŞVURACAKLAR İÇİN DUYURU

Ruby. Prof.Dr.Timur Karaçay Başkent Üniversitesi

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

CAN TECİM HEDEF DENEYİM. Tecrübe bütün öğretmenlerin en iyisidir. Publilus Syrus

Ders 8 Konu Özeti ve Problemler

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

Veritabanı Tasarımı. Introduction to the Oracle Academy

DERECESİ: ARANAN ŞARTLAR: İLAN TARİHİ:

Transkript:

Yazılım Mühendİslİğİ ve Günümüz PHP Programcılığı Anıl özselgin EkİM'12 - Özgür web günleri

Kavram BOLLUĞU Encaptulatıon Data hıdıng Cohesion LOOSE COUPLING Tıght couplıng static design Dynamıc desıgn Atomıcıty isolation Kıss Yagnı Dry WATERFALL AGILE SCRUM Xp PROTOTYPING V-MODEL AOP SOA SaaS DSL Ddd monolithic architecture GENERIC PROGRAMMING Delegation INHERITANCE

YAZILIM - ÇOK YENİ BİR ALAN Başka alanlardan öğrenmemiz gereken çok şey * İNŞAAT MÜHENDİSLİĞİ, 10.000 YIL * MAKİNE MÜHENDİSLİĞİ, 2.000 YIL * YAZILIM, 70 YIL

İYİ Yazılım dizayni * ORGANİZASYON (HAYATIN HER ALANINDA) * MODÜLERLİK (HER MÜHENDİSLİK DALINDA) * SOYUTLAMA

ORGANİZASYON * ŞEHİR PLANLARI * RESTORAN MENÜLERİ * KİTAPLARIN BÖLÜMLERİ * FİRMALARDAKİ DEPARTMANLAR * ÜNİVERSİTELERDEKİ BÖLÜMLER *...

ORGANİZASYON HAYATIN HER ALANINDA * BU KADAR ORGANİZASYONA SAHİP OLMAYAN ÇOK YAZILIM VAR :)

modülerlik * makine MÜHENDİSLİĞİ * ELEKTRONİK * İNŞAAT *...

Modülerlİk - standartların belirlenmesi * ELEKTRİĞİN 220v OLMASI * ampüllerin BELLİ STANDARTA GÖRE ÜRETİLMESİ * ÇAMAŞIR MAKİNELERİNİN KULLANIMININ AYNI OLMASI * TELEVİZYONUN SCART GİRİŞİ

SOYUTLAMA Soyut veri YAPILARI * LİSTE * AĞAÇ * GRAPH * Yiğin * Kuyruk

PROGRAMLAMA DİLLERİ - tarihsel BAKIŞ 1940-1950 İLK DİLLER 1950-1968 KOD BLOKLARININ TANIMLANABİLDİĞİ DİLLER 1968 PROSEDÜREL PROGRAMLAMA WHILE, FOR FONKSİYONEL PROGRAMLAMA

PROGRAMLAMA DİLLERİ - APOLLO 11 KODU # Page 821 CCS ZERLINA TCF PREMON1 RESETRPT CAF BIT12 EXTEND WOR CHAN13 TCF TASKOVER # # # N: HAS ZERLINA REACHED ZERO YET? N: DIMINISH ZERLINA, CONTINUE Y: RESET RUPT. TERMINATE COUNT'EM CAF BIT13 # ARE WE IN ATTITUDE-HOLD? EXTEND RAND CHAN31 EXTEND BZF RESETRPT # YES: SKIP REDESIGNATION LOGIC. -AZ CA L # NO. MASK -AZBIT CCS A CS AZEACH ADS AZINCR1 CA L MASK +AZBIT CCS A

PROGRAMLAMA DİLLERİ - prosedürel programlama * 1960'larda kodlar düzensiz ve dağınıktı * kod okumak ve Bug bulmak çok zorlu bir süreçti * APOLLO 11'İN KALKIŞINDAN 3 HAFTA ÖNCE ÇOK ÖNEMLİ BİR BUG TESPİT EDİLDİ * kod KARMAŞAsını ENGELLEMEK İÇİN çalışmalar, PROSEDÜREL PROGRAMLAMA DİLLERİ * c VE algol DİLLERİNİN YÜKSELİŞİ

PROGRAMLAMA DİLLERİ - nesne TABANLI PROGRAMLAMA * 1983 İLK GENİŞ ÇAPLI nesneye yönelimli PROGRAMLAMA DİLİ (C++) Daha modüler yapılar kurabilmemizi SAĞLIYOR KOD ORGANİZASYONUNU KOLAYLAŞTIRIYOR NAMESPACE KULLANIMI * 1995 SANAL MAKİNELER, Vırtual machines (Java) DONANIM VE İŞLETİM SİSTEMİNDEN BAĞIMSIZ ÇALIŞABİLME

Php Dİlİ nerede? * prosedürel * NESNE TABANLI (php 5'ten beri) * NAMESPACE DESTEKLİYOR * FONKSİYONEL PROGRAMLAMAYI DESTEKLİYOR * VİRTUAL MACHİNE ÜZERİNDE ÇALIŞMIYOR İŞLETİM SİSTEMİNE BAĞIMLI

KÖTÜ PHP PRATİKLERİ - php.net

KÖTÜ PHP PRATİKLERİ - CODEıgnıter class CI_DB_driver { $username; $password; $hostname; $database; $dbdriver $dbprefix $char_set $dbcollat $autoinit $swap_pre $port $pconnect $conn_id = $result_id $db_debug $benchmark $query_count = $bind_marker = $save_queries= $queries = $query_times = $data_cache $trans_enabled $trans_strict= = 'mysql'; = ''; = 'utf8'; = 'utf8_general_ci'; = TRUE; // Whether to automatically initialize the DB = ''; = ''; = FALSE; FALSE; = FALSE; = FALSE; = 0; 0; '?'; TRUE; array(); array(); = array(); = TRUE; TRUE;

KÖTÜ PHP PRATİKLERİ - CODEıgnıter * abstract class, ınterface yok * HERHANGİ BİR FONSKİYONUN İÇİNDE YER ALMAYAN AÇIKTA KALMIŞ KODLAR MEVCUT, ÇOK FAZLA * TRANSFER OBJELERİ YERİNE ÇOĞU YERDE İLETİŞİM DİZİLER (ARRAY) ÜZERİNDEN YAPILMIŞ * NAMESPACE KULLANILMAMIŞ * VERİTABANI İLE MODÜLERLİĞİ SAĞLAYAN BİR KATMAN YOK

KÖTÜ PHP PRATİKLERİ - WORDPRESS function check_password_reset_key($key, $login) { global $wpdb; $key = preg_replace('/[^a-z0-9]/i', '', $key); if ( empty( $key )!is_string( $key ) ) return new WP_Error('invalid_key', ('Invalid key')); if ( empty($login)!is_string($login) ) return new WP_Error('invalid_key', ('Invalid key')); $user = $wpdb->get_row($wpdb->prepare("select * FROM $wpdb->users WHERE user_activation_key = %s AND user_login = %s", $key, $login)); if ( empty( $user ) ) return new WP_Error('invalid_key', ('Invalid key')); } return $user;

KÖTÜ PHP PRATİKLERİ - WORDPRESS * KATMANLAR ARASI AYRIM YAPILMAMIŞ * HTML VE SQL İÇİÇE * NESNEYE YÖNELİK PROGRAMLAMA KULLANILMAMIŞ * HATTA ÇOK FAZLA FONKSİYON VE METODLARIN DIŞINDA KOD VAR * NAMESPACE DESIGN PATTERN HAK GETİRE :) * PHP'NİN BU KADAR GELİŞMEDİĞİ BİR DÖNEMDE ÇIKMIŞTI Günahı yok :)

KÖTÜ PHP PRATİKLERİ - drupal * kod organizasyonu ÇOK KÖTÜ * NESNE TABANLI DEĞİL * ESKİ BİR PROJE OLDUĞU İÇİN PHP'NİN YENİ ÖZELLİKLERİNİ İÇERMİYOR

OPENCART EKSİKLERİ VAR AMA... ARTILARI * NESNE TABANLI * MVC DESENİNE GÖRE TASARLANMIŞ EKSİLERİ * VERİ KATMANI MODÜLER DEĞİL * veri İLETİŞİMİ SIKÇA DİZİLER ÜZERİNDEN YAPILIYOR * ÇOK UZUN METODLAR İÇERİYOR

İYİ PHP PRATİKLERİ - SYMPHONY CMS ARTILARI * NESNE TABANLI * ÖNYÜZ TAMAMEN XSLT ÜZERİNE KURULMUŞ, DİLDEN BAĞIMSIZ, TERTEMİZ * MVC KATMANLARI BİRBİRİNDEN ÇOK İYİ AYRILMIŞ EKSİLERİ * arayüzler üzerinden İLETİŞİM KURULMAMIŞ

İYİ PHP PRATİKLERİ - SYMPHONY CMS <h2> <a href="{$root}/articles/{title/@handle}/"> <xsl:value-of select="title"/> </a> </h2> <ul class="meta"> <li class="icon-filed-under"> <xsl:apply-templates select="categories/item"/> </li> <li class="icon-comments"> <a href="{$root}/articles/{title/@handle}/#comments"> <xsl:text>comments (</xsl:text> <xsl:value-of select="@comments"/> <xsl:text>)</xsl:text> </a> </li> </ul>

İYİ PHP PRATİKLERİ yıı FRAMEWORK ARTILARI * tamamen NESNE TABANLI * MVC DESENİNE GÖRE TASARLANMIŞ * arayüzler (INTERFACE) üzerinden İLETİŞİM KURULUYOR * TÜM KODLAR BİR sınıfın (CLASS) İÇİNDE YERALIYOR * TYPE HINTING KULLANILMIŞ BAZEN EKSİLERİ * NAMESPACE İLE ORGANİZE EDİLMEMİŞ * MODÜLLER BAĞIMSIZ OLARAK KULLANILAMIYOR

İYİ PHP PRATİKLERİ yıı FRAMEWORK class CDbDataReader extends CComponent implements Iterator, Countable { private $_statement; private $_closed=false; private $_row; private $_index=-1; /** * Constructor. * @param CDbCommand $command the command generating the query result */ public function construct(cdbcommand $command) { $this->_statement=$command->getpdostatement(); $this->_statement->setfetchmode(pdo::fetch_assoc); }

ÇO00K İYİ PHP PRATİKLERİ ZEND FRAMEWORK ARTILARI * tamamen NESNE TABANLI, EXCEPTION * MVC DESENİNE GÖRE TASARLANMIŞ * arayüzler (INTERFACE) üzerinden İLETİŞİM KURULUYOR * NAMESPACE'LER İLE ORGANİZE EDİLMİŞ * VERİ katmani ORM KULLANIYOR * Dependency Injection DESTEKLİYOR * ÇOK FAZLA BİLEŞEN DESTEĞİ VAR * Bİleşenler ayrı olarak da kullanılabiliyor EKSİLERİ * orm yerine zend DB KULLANILIRSA ÇOK BAŞ AĞRITIR. VERİ KATMANI İLE İŞ KATMANINI AYIRMASI ÇOK ZORLAŞIYOR. DOCTRINE İLE KULLANMAK GEREK.

ÇO00K İYİ PHP PRATİKLERİ SYMFONY FRAMEWORK ARTILARI * tamamen NESNE TABANLI * MVC DESENİNE GÖRE TASARLANMIŞ * arayüzler (INTERFACE) üzerinden İLETİŞİM KURULUYOR * NAMESPACE'LER İLE ORGANİZE EDİLMİŞ * VERİ AKMANI ORM (DOCTRINE) KULLANIYOR * DOCTRINE'İ GELİŞTİREN TAKIMIN ÜRÜNÜ * Dependency Injection DESTEKLİYOR EKSİLERİ * BİLMİYORUM :)

Türkİye'DE PHP NASIL YAZILIYOR? * KODLAR APOLLO 11'İN KODLARINA BENZİYOR, ORGANİZASYON her ZAMAN SIKINTILI * FONKSİYONLAR çok UZUN TUTULUYOR * NESNE tabanlı Dİzayn yapılmıyor * veri İLETİŞİMİ İÇİN SÜREKLİ DİZİLER (ARRAY) KULLANILIYOR. * ARAYÜZLER ÜZERİNDEN İLİŞKİLER KURULMUYOR. PHP DİLİNİ ÖĞRENDİĞİMİZ KAYNAKLAR YETERSİZ-KİTAPLAR, BLOGLAR, KURSLAR ARTIK SPAGETTİYE DOYANLAR BAŞKA BİR ŞEYLER ARIYOR :)

KAYNAKLAR

Sorular?