Funktionaalisten ja olio-imperatiivisten ohjelmistokomponenttien yhdistäminen
Lahtinen, Tero (2014)
Lahtinen, Tero
2014
Tietotekniikan koulutusohjelma
Tieto- ja sähkötekniikan tiedekunta - Faculty of Computing and Electrical Engineering
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2014-05-05
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tty-201405221192
https://urn.fi/URN:NBN:fi:tty-201405221192
Tiivistelmä
Yksi ensimmäisistä tehtävistä ohjelman toteutuksen alkuvaiheessa on ohjelmointikielen valinta. Tutkimukset ovat osoittaneet, että sopivan ohjelmointikielen valinnalla on suuri merkitys ohjelman elinkaarikustannuksiin. Siksi valinta tulisikin tehdä hyvin perusteltujen syiden pohjalta.
Koska yleisimmin käytetyt ohjelmointikielet ovat olio-imperatiivisia, on siksi olemassa erittäin paljon valmiita ohjelmistokomponentteja, jotka on toteutettu näillä kielillä. Täysin uuttakaan ohjelmaa toteutettaessa ei yleensä haluta toteuttaa kaikkia ominaisuuksia aivan alusta asti, vaan ohjelmiston suunnittelussa pyritään hyödyntämään olemassa olevia komponentteja. Kun ohjelmointikieleksi valitaan esimerkiksi funktionaalinen kieli, on usein varauduttava liittymään jollain muulla ohjelmointikielellä toteutettuun komponenttiin. Tällaisissa tapauksissa kahden erilaisen ohjelmointikielen ja niiden paradigmojen yhdistäminen saattaa olla haasteellista.
Tässä diplomityössä tutkitaan, miten C#:lla ja F#:lla toteutettujen komponenttien yhdistäminen voidaan tehdä ja miten eri paradigmojen yhdistämisestä seuraavat ongelmat voidaan ratkaista. Tämän lisäksi työssä tutkittiin C#:n ja F#:n käytettävyyttä haastattelututkimuksen avulla. Tutkimuksella selvitettiin, millaisia etuja funktionaalisen F#:n käytöllä on verrattuna olio-imperatiiviseen C#:iin ja saadaanko sen käytöstä niin paljon hyötyä, että sitä kannattaa käyttää vaikka joutuisi tekemään lisätyötä C#:lla toteutettuun ohjelmaan liittyäkseen.
Tämä diplomityö on tehty Atostek Oy:lle, jossa C#- ja F#-kieliä on hyödynnetty useissa käytännön ohjelmistoprojekteissa. Siinä missä C# on yleisesti käytetty olio-imperatiivinen kieli, on F# funktionaalinen. C#:n ja F#:n tapauksessa yhteinen ajoympäristö, Microsoftin .NET, ratkaisee ison osan eri kielillä kirjoitettujen komponenttien yhdistämisen ongelmista. Ratkaisematta kuitenkin jää edelleen paradigmojen yhdistämisestä aiheutuvat haasteet.
Haastattelututkimuksella onnistuttiin saamaan selville ohjelmistosuunnittelijoiden kummankin kielen käytännön hyödyntämiseen perustuvat mielipiteet. Haastattelujen tulokset ovat keskenään hyvin yhdenmukaisia ja antavat hyvän kuvan funktionaalisen F#:n hyödyntämisestä käytännössä. One of the first tasks when starting the implementation of a new program is to choose a programming language. Studies show that software life cycle cost can be influenced by choosing an appropriate programming language. Therefore the selection of the language should be based on rational reasoning.
The most popular programming languages today are object-imperative. Therefore there exist plenty of ready-made software components implemented in those languages. Even when implementing a completely new program, it is not usually appropriate to implement all its features from scratch. Therefore, ready-made components are used. When, for example, a functional programming language is chosen as the implementation language, the program must be prepared to be integrated to components implemented in some other language. In these cases integrating different languages and different paradigms may raise problems.
This master’s thesis describes how software components implemented with C# and F# can be integrated, and how the problems caused by the different programming paradigms can be solved. Also the usability of C# and F# is studied by interviewing software developers who have used the languages in practice. The study also tried to find out what are the benefits of using F# compared to C# and if the benefits overcome the extra work that is required to integrate components implemented in another programming paradigm.
This master’s thesis is made for Atostek Oy, where C# and F# programming languages are used in software projects. C# is a widely used object-imperative language, and F# is its functional counterpart. Both languages are executed in the Microsoft’s .NET framework. In the case of C# and F#, the runtime environment solves most of the problems of integrating software components implemented in different programming languages. However, the problems caused by different paradigms must still be solved.
Results of the interviews show what are the software developers’ thoughts on using both languages in practice. The results were consistent and provide a comprehensive view to the practical use of F#.
Koska yleisimmin käytetyt ohjelmointikielet ovat olio-imperatiivisia, on siksi olemassa erittäin paljon valmiita ohjelmistokomponentteja, jotka on toteutettu näillä kielillä. Täysin uuttakaan ohjelmaa toteutettaessa ei yleensä haluta toteuttaa kaikkia ominaisuuksia aivan alusta asti, vaan ohjelmiston suunnittelussa pyritään hyödyntämään olemassa olevia komponentteja. Kun ohjelmointikieleksi valitaan esimerkiksi funktionaalinen kieli, on usein varauduttava liittymään jollain muulla ohjelmointikielellä toteutettuun komponenttiin. Tällaisissa tapauksissa kahden erilaisen ohjelmointikielen ja niiden paradigmojen yhdistäminen saattaa olla haasteellista.
Tässä diplomityössä tutkitaan, miten C#:lla ja F#:lla toteutettujen komponenttien yhdistäminen voidaan tehdä ja miten eri paradigmojen yhdistämisestä seuraavat ongelmat voidaan ratkaista. Tämän lisäksi työssä tutkittiin C#:n ja F#:n käytettävyyttä haastattelututkimuksen avulla. Tutkimuksella selvitettiin, millaisia etuja funktionaalisen F#:n käytöllä on verrattuna olio-imperatiiviseen C#:iin ja saadaanko sen käytöstä niin paljon hyötyä, että sitä kannattaa käyttää vaikka joutuisi tekemään lisätyötä C#:lla toteutettuun ohjelmaan liittyäkseen.
Tämä diplomityö on tehty Atostek Oy:lle, jossa C#- ja F#-kieliä on hyödynnetty useissa käytännön ohjelmistoprojekteissa. Siinä missä C# on yleisesti käytetty olio-imperatiivinen kieli, on F# funktionaalinen. C#:n ja F#:n tapauksessa yhteinen ajoympäristö, Microsoftin .NET, ratkaisee ison osan eri kielillä kirjoitettujen komponenttien yhdistämisen ongelmista. Ratkaisematta kuitenkin jää edelleen paradigmojen yhdistämisestä aiheutuvat haasteet.
Haastattelututkimuksella onnistuttiin saamaan selville ohjelmistosuunnittelijoiden kummankin kielen käytännön hyödyntämiseen perustuvat mielipiteet. Haastattelujen tulokset ovat keskenään hyvin yhdenmukaisia ja antavat hyvän kuvan funktionaalisen F#:n hyödyntämisestä käytännössä.
The most popular programming languages today are object-imperative. Therefore there exist plenty of ready-made software components implemented in those languages. Even when implementing a completely new program, it is not usually appropriate to implement all its features from scratch. Therefore, ready-made components are used. When, for example, a functional programming language is chosen as the implementation language, the program must be prepared to be integrated to components implemented in some other language. In these cases integrating different languages and different paradigms may raise problems.
This master’s thesis describes how software components implemented with C# and F# can be integrated, and how the problems caused by the different programming paradigms can be solved. Also the usability of C# and F# is studied by interviewing software developers who have used the languages in practice. The study also tried to find out what are the benefits of using F# compared to C# and if the benefits overcome the extra work that is required to integrate components implemented in another programming paradigm.
This master’s thesis is made for Atostek Oy, where C# and F# programming languages are used in software projects. C# is a widely used object-imperative language, and F# is its functional counterpart. Both languages are executed in the Microsoft’s .NET framework. In the case of C# and F#, the runtime environment solves most of the problems of integrating software components implemented in different programming languages. However, the problems caused by different paradigms must still be solved.
Results of the interviews show what are the software developers’ thoughts on using both languages in practice. The results were consistent and provide a comprehensive view to the practical use of F#.